Opened 13 years ago
Closed 12 years ago
#20196 closed New feature (wontfix)
Better support for folder uploads
| Reported by: | Jonas H. | Owned by: | nobody |
|---|---|---|---|
| Component: | Forms | Version: | |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Someday/Maybe | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Feature request: Make folder uploads (<input type=file webkitdirectory>) possible in Django.
Here are some of my ideas regarding design and implementation.
Database, forms
Add a new FolderUploadField that stores the path where the folder has been uploaded to, similar to how FileUploadFields work. The object you deal with in business logic code is a Folder object, the File equivalent.
QueryDict
Add a QueryDict.getfolder method that returns a (Uploaded)Folder object. Note that multi-file and folder uploads are not distinguishable in POST data, so we should have some sanity checks before constructing that object. At the very least we should check that all file paths have a common folder prefix: ["foo/bar.jpg", "foo/spam.txt"] is okay while ["foo/bar.jpg", "spam/eggs.txt"] is not.
Folder object
Constructed from list of File objects, it should at least have these two methods:
.walk()behaves similar toos.walkbut yieldsFileobjects.save(dest)saves the whole folder in its original structure underdest.
Testing
Special handling is required to properly encode Folder objects in the test client.
Change History (2)
comment:1 by , 13 years ago
| Component: | Uncategorized → Forms |
|---|---|
| Triage Stage: | Unreviewed → Someday/Maybe |
comment:2 by , 12 years ago
| Resolution: | → wontfix |
|---|---|
| Status: | new → closed |
I still believe an external app is the way to go, at least at first. Please reopen if some code in Django needs to be changed to make this possible.
It looks like this could live outside of core at first. I'd prefer to wait until this feature is standardized by W3C to implement it in Django.
The testing part may be tricky, but can probably be solved by subclassing the test client.