- From: guest271314 <notifications@github.com>
- Date: Sat, 28 Mar 2020 20:33:54 -0700
- To: w3c/FileAPI <FileAPI@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/FileAPI/issues/147/605553187@github.com>
Some observations when `Blob` is passed as the innermost element of an array of arrays
```
var MY_JSON_FILE = [new Blob([1])];
var blob = new Blob(MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob);
```
logs the string
`1`
```
var MY_JSON_FILE = [[new Blob([1])]];
var blob = new Blob(MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob);
```
and
```
var MY_JSON_FILE = [[new Blob([1])]];
var blob = new Blob(MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(new TextDecoder().decode(new Uint8Array(e.target.result)))
});
```
fr.readAsArrayBuffer(blob);
logs string
`[object Blob]`
```
var MY_JSON_FILE = [[[`{
"hello": "world"
}`]]];
var blob = new Blob([[MY_JSON_FILE]]);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob);
```
and
```
var MY_JSON_FILE = [`{
"hello": "world"
}`];
var blob = new Blob(MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob);
```
logs
```
{
"hello": "world"
}
```
for an array of arrays
```
var blob = new Blob(..."1");
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(new TextDecoder().decode(new Uint8Array(e.target.result)))
});
fr.readAsArrayBuffer(blob);
```
logs
`Uncaught TypeError: Failed to construct 'Blob': The provided value cannot be converted to a sequence.`
```
var MY_JSON_FILE = [new Blob([1])];
var blob = new Blob(...MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(new TextDecoder().decode(new Uint8Array(e.target.result)))
});
fr.readAsArrayBuffer(blob);
```
logs
`Uncaught TypeError: Failed to construct 'Blob': The object must have a callable @@iterator property.`
```
var MY_JSON_FILE = [[new Blob([1]), new Blob([2])]];
var blob = new Blob(MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob);
```
logs
`[object Blob],[object Blob]`
in this case for array of arrays one solution is, per https://stackoverflow.com/a/37152508
> `fun(a, b, ...c)`: This construct [doesn't actually have a name in the spec](http://www.ecma-international.org/ecma-262/6.0/#sec-left-hand-side-expressions). But it works very similar as spread elements do: It expands an iterable into the list of arguments.
It would be equivalent to func.apply(null, [a, b].concat(c)).
where
```
var MY_JSON_FILE = [[new Blob([1]), new Blob([2])]];
var blob = new Blob(...MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(e.target.result)
});
fr.readAsText(blob)
```
logs
`12`
if the N nested arrays beyond 2 are not flattened
```
var flatten = arr => {
arr = arr.flat();
return arr.find(a => Array.isArray(a)) ? flatten(arr) : arr
}
var MY_JSON_FILE = [[[new Blob([1]), new Blob([2])]], 3, ["abc"]];
var blob = new Blob(flatten(MY_JSON_FILE));
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(new TextDecoder().decode(new Uint8Array(e.target.result)))
});
fr.readAsArrayBuffer(blob);
```
```
var MY_JSON_FILE = [[[new Blob([1]), new Blob([2])]]];
var blob = new Blob(...MY_JSON_FILE);
var fr = new FileReader();
fr.addEventListener("load", e => {
console.log(new TextDecoder().decode(new Uint8Array(e.target.result)))
});
fr.readAsArrayBuffer(blob);
```
the output is
`[object Blob],[object Blob]`
again.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/FileAPI/issues/147#issuecomment-605553187
Received on Sunday, 29 March 2020 03:34:09 UTC