On Sep 21, 2007, at 10:49 AM, Dave Camp wrote:
On 9/21/07, Robert O'Callahan <[EMAIL PROTECTED]> wrote:
Actually we have an experimental API for this now. See here:
http://mxr.mozilla.org/seamonkey/source/dom/public/idl/html/nsIDOMNSHTMLInputElement.idl#55
http://mxr.mozilla.org/seamonkey/source/content/base/public/nsIDOMFileList.idl
http://mxr.mozilla.org/seamonkey/source/content/base/public/nsIDOMFile.idl
The core is:
readonly attribute DOMString fileName;
readonly attribute unsigned long long fileSize;
It would be nice if this was designed to handle the possibility of
multiple file selection (which I think Web Forms 2 enables).
DOMString getAsText(in DOMString encoding);
// raises(FileException) on retrieval
DOMString getAsDataURL();
// raises(FileException) on retrieval
DOMString getAsBinary();
// raises(FileException) on retrieval
These should be self-explanatory.
Minor nitpicks:
For the ones that don't take a parameter, I think a read-only
attribute would be more appropriate than a "get" function. It's
relatively rare for JS APIs to use no-arg getter instead of an
attribute, and even when it does it's rare for the function name to
start with "get".
DOMString getAsBinary() isn't actually self-explanatory to me. How do
you encode binary data as a UTF-16 string? I can think of at least two
vaguely obvious ways (each code point is a byte, or each code point is
a 16-bit chunk of the data). Both seem awkward to work with. I think
it would be more effective to use a dedicated type for binary data.
This is already likely to happen for XHR 2 binary data access, with
something based on the ES4-proposed ByteArray class. What do you guys
think of that?
I guess this isn't great for really huge files, but multi-megabyte
files
should be OK on most machines, and it avoids having to deal with a
client-writable "cache". It obviously has some interesting uses for
online
apps as well.
It'd be possible to extend this to avoid bringing these files into
memory. We'd just need globalStorage (or something like it) to
accept/return nsIDOMFile objects, and a way for XHR to send them.
Sounds reasonable. I'd love to see a rough cut at a spec for this.
Regards,
Maciej