Fixed
Details
Details
Priority
Assignee
Alex
AlexReporter
Alex
AlexDeveloper
Erik S.
Erik S.Change Log Message
Adding file distributed storage engine
External issue ID
1022
External issue URL
BC Break Details
Reborn methods:
"ImageEventHandler::ValidateFileName" into "FileHelper::ensureUniqueFilename"
Story Points
3
Fix versions
Affects versions
Patch Instructions
Patches must be submitted through Phabricator.
To submit patch via Command Line use Patches Workflow (via Arcanist) tutorial.
To submit patch via Web Interface use Patches Workflow (via Web Interface) tutorial.
Created March 13, 2011 at 12:21 PM
Updated April 30, 2025 at 10:39 AM
Resolved July 25, 2012 at 10:32 AM
When file uploads are happening a lot on the site, then all files are stored under same /system/... sub-folder. This doesn't pose any problem to webserver to easily access them, however it makes it near to impossible to manage that files manually. Like view/backup/restore individual files, when there are 2000+ files in one directory.
That's why we are proposing uploaded file distribution engine, that will create sub-folders within target upload folder to store uploaded files. Here are some ideas:
[b]1. Filenames/b
a. ability to have Prefix (defined in Field declaration (in unit config), default is empty, DATE-TIME which reserved, but can specify any other symbols)
b. ability to have Ending (defined in Field declaration (in unit config), default is DATE-TIME which reserved, but can specify any other symbols)
DATE = 20110131 (2011/01/31)
TIME = 123401 (12:34:01)
Examples:
20110131-123401_my-custom-filename-whatever.jpg
my-custom-filename-whatever_20110131-123401.jpg
or other combinations
This will give us full flexibility in filenames
[b]2. Folders/b
Similar here, give 3 options for each upload field:
a. As is now - All files go into single specified folder.
b. Chronological - YEARMONTH / DAY / (adds 2 sub-levels)
c. Hash - as proposed by Alex (adds 2 sub-levels, see "Additional Information" field for function code)
[b]NOTE:/b
1. Hashed path will be stored along with a filename, since in case of timestamp-based hashing there is no way to determine hash path to a file by it's name.
2. All resized versions will be placed without special structure under /resized/ folder.
3. All code completely/mostly will be located in kUploadFormatter class, so extending that class could give ability to add new storage engine types