[whatwg] Drag-and-drop folders/files support with directory structure using DirectoryEntry

timeless timeless at gmail.com
Tue Nov 15 15:13:22 PST 2011


You could cheat by providing a 0 byte file "folder/nul" and define it
to not be created. On Windows (dos), such a file is used to test for
the existence of a directory, and it's illegal to create a file by
that name.

On 11/15/11, Jonas Sicking <jonas at sicking.cc> wrote:
> On Tue, Nov 15, 2011 at 1:01 AM, Kinuko Yasuda <kinuko at chromium.org> wrote:
>> Hi,
>>
>> We'd like to propose (and experiment in Webkit/chromium) exposing
>> dropped files/folders as {File,Directory}Entry defined in FileSystem
>> API [1] for better folders/files drag-and-drop support.
>>
>> [1] File API: Directories and System http://www.w3.org/TR/file-system-api/
>>
>> Usage scenario:
>>   Many sites have 'upload your files' feature, like for
>>   your photo images.  HTML5 allows you to do this via
>>   <input type="file" multiple> or drag-and-drop feature,
>>   but the current solution does not provide clean solution
>>   for cases with folders, files/folder mixed cases, or folders
>>  with subfolders cases.
>>
>>  For context, back then we have proposed (and implemented)
>>  'directory' attribute for <input type=file> specifically to upload
>>  a directory, but the approach does not provide useful information
>>  to webapps about which file comes from which folder, neither
>>  does it allow apps to control how and when to enumerate
>>  directories (e.g. app cannot show progress meter etc even
>>  the enumerating part takes long time).
>>  http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-April/025764.html
>>
>> Proposal:
>>   Add a new field 'entries' to <input type=files> element
>>  and to DataTransfer object, and populate the field with
>>   file or directory 'Entries' defined in FileSystem API [1]
>>  upon file selection or drop events.
>>
>>   Since FileSystem API naturally supports tree-structured
>>  folder hierarchy, Entry object exposes handy fields like 'isFile'
>>  and 'isDirectory', and allows webapps to recursively walk over
>>  the nested entries in subfolders via ReadDirectory() method.
>>
>>   This approach allows webapps to directly interact
>>   with the local folder structure, and also allows
>>   them to control the enumerating part so that
>>   the apps can show nice progress meter if they want.
>>
>> Security notes:
>>  The Entries exposed by this feature must be
>>  read-only and isolated in a special temporary
>>  filesystem so that the webapps cannot access any
>>  other folders outside the dropped ones.
>>
>> Example:
>>   When I choose or drag-and-drop a set of folders
>>   in the photos folder like:
>>
>>     /Users/kinuko/Photos/trip/1.jpg
>>     /Users/kinuko/Photos/trip/2.jpg
>>     /Users/kinuko/Photos/trip/3.jpg
>>     /Users/kinuko/Photos/halloween/a.jpg
>>     /Users/kinuko/Photos/halloween/b.jpg
>>     /Users/kinuko/Photos/tokyo/1.jpg
>>     /Users/kinuko/Photos/tokyo/2.jpg
>>     ...
>>
>>  Via the new 'entries' field the site can access each
>>  subfolder 'trip' or 'halloween' by scripting, and can
>>  properly organize and process pictures using the local
>>  folder structure.
>>
>>  We can think of similar interesting usage scenarios
>>  like local-cloud sync app or bulk 'importer', e.g. importing
>>  local source directory to cloud IDE etc.
>>
>> What are your thoughts about adding folder support using DirectoryEntry?
>
> Adding FileEntry/DirectoryEntry seems confusing since those are
> generally writable in the FileSystem API spec, right? Additionally,
> DirectoryEntry is asynchronous, which makes enumerating the tree more
> painful.
>
> The way we were planning on exposing this in Gecko is to simply set
> File.name to the full relative path to the folder dropped. So in the
> example above, if the user dropped the "Photos" folder from the
> example above on a page, we'd make .files return a list of 7 Files,
> with names like "Photos/trip/1.jpg", "Photos/trip/2.jpg",
> "Photos/trip/3.jpg", "Photos/halloween/a.jpg", etc.
>
> This has the advantage of being a smaller and simpler API.
>
> The only functionality that I can think of which we'd loose is the
> ability to deal with empty directories since they simply wouldn't show
> up in the .files list. But I'm not sure there are use cases for that.
> As a data point, mercurial and git has both decided not to support
> empty directories.
>
> / Jonas
>
> / Jonas
>

-- 
Sent from my mobile device



More information about the whatwg mailing list