回答編集履歴
4
コメントの加筆
test
CHANGED
@@ -64,3 +64,11 @@
|
|
64
64
|
```
|
65
65
|
|
66
66
|
https://livecodes.io/?x=id/bs5ddwfa9w2
|
67
|
+
|
68
|
+
1GB 読み込んでみましたが特に問題無いです。
|
69
|
+
|
70
|
+
ちなみに1GBのファイルは次のコマンドで作成しました。
|
71
|
+
|
72
|
+
```cmd
|
73
|
+
fsutil file createnew file.txt 1073741824
|
74
|
+
```
|
3
コード例を追加
test
CHANGED
@@ -11,3 +11,56 @@
|
|
11
11
|
[Blob: stream() メソッド - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Blob/stream)
|
12
12
|
|
13
13
|
[TextDecoderStream - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/TextDecoderStream)
|
14
|
+
|
15
|
+
### 読み込むコード例
|
16
|
+
|
17
|
+
こんな感じで良いのでは?
|
18
|
+
|
19
|
+
```js
|
20
|
+
openReadButton.addEventListener("click", openReadStart);
|
21
|
+
|
22
|
+
/**
|
23
|
+
* ファイルの読み込みを実施する関数
|
24
|
+
*/
|
25
|
+
async function openReadStart() {
|
26
|
+
const file = await showPicker();
|
27
|
+
log(`file: name:${file.name} size:${file.size}`);
|
28
|
+
const arrayBuffer = await readToArrayBuffer(file, ({ offset, length }) =>
|
29
|
+
log(`read ... ${offset}/${length}`),
|
30
|
+
);
|
31
|
+
log(`read complete: ${arrayBuffer.byteLength} byte`);
|
32
|
+
console.log(arrayBuffer);
|
33
|
+
}
|
34
|
+
|
35
|
+
/**
|
36
|
+
* ファイルを選択する
|
37
|
+
*/
|
38
|
+
async function showPicker() {
|
39
|
+
const input = document.createElement("input");
|
40
|
+
input.type = "file";
|
41
|
+
const { resolve, promise } = Promise.withResolvers();
|
42
|
+
input.addEventListener("change", resolve);
|
43
|
+
input.showPicker();
|
44
|
+
await promise;
|
45
|
+
return input.files[0];
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* ファイルを arrayBuffer に変換する
|
50
|
+
*/
|
51
|
+
async function readToArrayBuffer(file, progress) {
|
52
|
+
const array = new ArrayBuffer(file.size, { maxByteLength: file.size });
|
53
|
+
array.byteOffset = 0;
|
54
|
+
const buffer = new Uint8Array(array);
|
55
|
+
let offset = 0;
|
56
|
+
const iterator = file.stream();
|
57
|
+
for await (const value of iterator) {
|
58
|
+
buffer.set(value, offset);
|
59
|
+
offset += value.byteLength;
|
60
|
+
if (progress) await progress({ offset, length: file.size });
|
61
|
+
}
|
62
|
+
return buffer.buffer;
|
63
|
+
}
|
64
|
+
```
|
65
|
+
|
66
|
+
https://livecodes.io/?x=id/bs5ddwfa9w2
|
2
リンクをタイトルに合わせる
test
CHANGED
@@ -8,4 +8,6 @@
|
|
8
8
|
console.log(text);
|
9
9
|
```
|
10
10
|
|
11
|
-
https://developer.mozilla.org/ja/docs/Web/API/Blob/stream
|
11
|
+
[Blob: stream() メソッド - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Blob/stream)
|
12
|
+
|
13
|
+
[TextDecoderStream - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/TextDecoderStream)
|
1
シンタックスハイライトブロックの終了漏れ
test
CHANGED
@@ -6,5 +6,6 @@
|
|
6
6
|
|
7
7
|
for await (const text of file.stream().pipeThrough(new TextDecoderStream()))
|
8
8
|
console.log(text);
|
9
|
+
```
|
9
10
|
|
10
11
|
https://developer.mozilla.org/ja/docs/Web/API/Blob/stream
|