Opened 11 years ago

Closed 10 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 to os.walk but yields File objects
  • .save(dest) saves the whole folder in its original structure under dest.

Testing

Special handling is required to properly encode Folder objects in the test client.

Change History (2)

comment:1 by Aymeric Augustin, 11 years ago

Component: UncategorizedForms
Triage Stage: UnreviewedSomeday/Maybe

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.

comment:2 by Aymeric Augustin, 10 years ago

Resolution: wontfix
Status: newclosed

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.

Note: See TracTickets for help on using tickets.
Back to Top