[whatwg] Forms: <input type=file> and directory tree picking
Ian Hickson
ian at hixie.ch
Thu Aug 29 13:20:44 PDT 2013
On Fri, 2 Aug 2013, Jonathan Watt wrote:
>
> I'm working on Mozilla's implementation of <input type=file> to allow
> the user to pick a directory. The idea would be that the files in that
> directory and its subdirectories would be added to the
> HTMLInputElement.files FileList.
This seems to be dangerous in that it makes it really easy for the user to
select a single item that expands into tens of thousands if not millions
of files on a remote disk, which then all have to be synchronously
enumerated to get the count so that code can then itself enumerate through
the entire list.
> The advantage of avoiding the need for the 'directory' attribute would
> be that directory picking would work for existing content with <input
> type=file multiple> without needing to be changed. One disadvantage
> would be that existing content may depend on the file names in the
> FileList being unique.
I would have liked the file names to still be unique, by prefixing the
names with the relevant parts of the subpaths (that is, if I select
foo.txt and bar/ which contains another foo.txt, .files would contain
"foo.txt" and "bar/foo.txt"), but I think that ship sailed (and now the
spec explicitly requires otherwise).
> We would change the File interface to add a 'path' property, which would
> be the path (without the file name) of the file relative to the
> directory that was picked.
That might work.
> Currently authors can use HTMLInputElement.click() to open a system file
> picker. To give content the ability to open a system directory picker
> we'd add a corresponding .openDirectoryPicker() function.
So you wouldn't be able to pick a file and a directory as in the example
above? That seems unfortunate...
> In my prototype implementation it took around 30 seconds to build the
> FileList for a directory of 200,000 files with a top end SSD
Wow. That's... not great in a UI.
> so depending on what the page is doing, directory picking could take
> some time. To allow content authors with styled <input> to provide
> feedback to users during scans of large directory trees we plan to have
> openDirectoryPicker return a ProgressPromise:
>
> https://github.com/slightlyoff/Promises/blob/master/ProgressFuture.idl
>
> We'd then fire progress events at the promise specifying how many files
> had been processed so far.
I feel very uncomfortable with the idea that we'd intentionally have an
expensive API like this. But I guess I don't really know what the use
cases are, so it's hard to evaluate.
Anyway, I don't have a better suggestion right now. What has the
implementation experience been like so far?
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list