- From: josephrocca <notifications@github.com>
- Date: Fri, 05 Aug 2022 02:50:53 -0700
- To: w3c/FileAPI <FileAPI@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/FileAPI/issues/179@github.com>
Obviously data URLs should be avoided where possible, but unfortunately developers are often interacting with systems/libraries/APIs outside their control, and, practically, `readAsDataURL` is used a lot -- actually, about as much as `readAsText` and `readAsArrayBuffer` combined:
* **readAsDataURL**: https://github.com/search?l=JavaScript&q=readAsDataURL&type=Code (1.6 million hits)
* **readAsText**: https://github.com/search?l=JavaScript&q=readAsText&type=Code (770k hits)
* **readAsArrayBuffer**: https://github.com/search?l=JavaScript&q=readAsArrayBuffer&type=Code (830k hits)
The `blob.arrayBuffer()` and `blob.text()` methods are delightful to use compared to previous methods, but for data URLs / base64 we're stuck with:
```js
let file = ...;
let dataUrl = await new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = (e) => reject(e);
});
```
which is the opposite of delightful. This is one of those cases where I'm "embarrassed" by how convoluted a simple task is in JS when helping someone who is new to JS.
There are a couple of proposals that are related to this issue:
* https://github.com/lucacasonato/proposal-binary-encoding
* https://github.com/tc39/proposal-arraybuffer-base64
That said, I really like promise-based `blob.methodName()` approach, and I'm hoping that we'll eventually get something like that for data URLs.
--
Reply to this email directly or view it on GitHub:
https://github.com/w3c/FileAPI/issues/179
You are receiving this because you are subscribed to this thread.
Message ID: <w3c/FileAPI/issues/179@github.com>
Received on Friday, 5 August 2022 09:51:04 UTC