Skip to content

Commit 69648e1

Browse files
save file
1 parent c004c59 commit 69648e1

File tree

1 file changed

+76
-0
lines changed
  • blog/25-07-31/fetch-download-stream/ex

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
<style>
3+
</style>
4+
5+
<div id=root>
6+
7+
<div>
8+
encoding
9+
<span id=encoding></span>
10+
</div>
11+
<div>
12+
content-length
13+
<span id=content-length></span>
14+
</div>
15+
<div id=progress>
16+
<div id=bar></div>
17+
</div>
18+
19+
</div>
20+
21+
22+
<script>
23+
24+
(async()=>{
25+
console.clear();
26+
27+
28+
var url = 'https://raw.githubusercontent.com/javascript-2020/external/main/ffmpeg/ffmpeg-wasm/ffmpeg-wasm.zip'
29+
30+
31+
//var url = 'https://cdn.jsdelivr.net/gh/javascript-2020/libs/js/io/tiny-unzip/tiny-unzip.m.js';
32+
33+
var headers = {};
34+
var method = 'get';
35+
var body = undefined;
36+
37+
var res = await fetch(url,{headers,method,body});
38+
39+
var encoding = res.headers.get('content-encoding')?.toLowerCase();
40+
if(encoding && encoding!=='identity'){
41+
console.log('unable to reliably computer content-length');
42+
}
43+
var len = res.headers.get('content-length');
44+
console.log(len);
45+
var total = 0;
46+
var reader = res.body.getReader();
47+
var chunks = [];
48+
while(true){
49+
50+
const {value,done} = await reader.read();
51+
if(done)break;
52+
total += value.length;
53+
console.log('chunk',datatype(value),value.byteLength,total,(total/len*100).toFixed(1)+' %');
54+
chunks.push(value);
55+
56+
}//while
57+
var total = chunks.reduce((acc,chunk)=>acc+chunk.length,0);
58+
var buf = new Uint8Array(total);
59+
var offset = 0;
60+
for(var chunk of chunks){
61+
62+
buf.set(chunk,offset);
63+
offset += chunk.length;
64+
65+
}//for
66+
var blob = new Blob([buf],{type:'application/octet-stream'});
67+
console.log(blob);
68+
69+
70+
71+
function datatype(v){return Object.prototype.toString.call(v).slice(8,-1).toLowerCase()}
72+
73+
})();
74+
75+
76+
</script>

0 commit comments

Comments
 (0)