77
88<!DOCTYPE html>
99
10-
11- < html >
10+ < html lang =en >
1211
1312 < head >
1413 < meta charset =UTF-8 >
15-
14+
1615 < title >
17- streaming upload with fetch
16+ Streaming Upload With Fetch
1817 </ title >
18+
1919 < meta name =description content ='Discover how to stream file uploads using the Fetch API. This interactive blog post includes a live, editable demo so you can experiment with streaming techniques directly in your browser. '>
2020
21- < link rel =icon type ='image/png ' href ='/blog/image/blog-30.png '>
21+ < link rel =icon href ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAABLFBMVEVHcEwopnMfpm8epm4epm4hpm81pHgfpm8ipnAhpm8ipnAfpm8gpm8jpnAsquAqpXQhpnAjpnEspXQhpnDr3Mgtqt8epm8fpm8kpnEgpm8rpXPr6OkqquAqquEjpnF/xagnqHTr6OlUtY7m5ubm5ub/9//m5uYbpWyXzLZ1s4UPnmRbqrkdpm7m5ubp5+gbpm0bpWwsq3fC29GXzbaMyrEwrOFHtIYnquHb4+Cz1uUkp3LT4ebi5ejwhhL3jhj7mSO72eXkhB12w+T4pDd8xafF3NKfijLWsrDc3diHlIzyr07et4jq07fqmkfhqFfyv3dauuJnveE2rn1AnFltkULIx8dQomPMfxXvjbNuo4xylYXu0KZqr7fOwrFaueL9yoTI1MatqHQwqtqDrqPS97zrAAAALHRSTlMAHtX5958F0l+Pfe2lXa4QgGAPjf6b8fBbzw9Y0L1h6t3NR9HhDPzLh/QusFA6UqkAAAGESURBVCjPdZNnW8IwEIDTtKVQKHsj7u21RUVREBFQ2SjuPf//fzBt0gFPfT+0z9M3vVwudwhZcLEQzvB8Bof8HJqFi2IeGLwkTy/w+TFMgRWfYyMBAfSShW54IZG3bFwEqJ6XLRYWzQBinEUOAOi7F5rF0rJErA4JGl8RDL2nqYyVte2Nau+lKmTNnI2s3Hq1UNjc6jz1ABv5yzCj1XU12R93nnWQyc+SrdneZMFVo35ZBZA4pPCWrh1Tatpr+/Tx1qhPFonAtNo6oLSS/Ubzjh4OSZY+ua5QJkbokvk5h4IuPZcqhsPF3/Zp88EsHQQRb+sPosOp8M64UR8c0r8FR9O9Kz/fjfqoa2s7uFY7I0zeSOjhEdNBJzV67trX52igWTrnHIxV7X2YVG0tuspC9X2XPJgmZXEV1cR8MU2K6nEltpadC3XagUC1eaHIT9qBNNO+i/INqZqg2M3kBWsmFBG9rJh3GpmflUIi7hqD2OwY+H3/DxGOekzZfAinAdI4FHPkH67FfQ17kRvyAAAAAElFTkSuQmCC '>
2222 < meta name =viewport content ='width=device-width, initial-scale=1 '>
23-
24-
23+
2524 < base href ='https://ext-code.com/blog/25-07-23/streaming-upload-with-fetch/ '>
2625 < link rel =canonical href ='https://ext-code.com/blog/25-07-23/streaming-upload-with-fetch.html/streaming-upload-with-fetch.html '>
2726
28-
29- < script type ='application/ld+json '>
3027
28+ < script type ='application/ld+json '>
3129 {
3230 "@context" : "https://schema.org" ,
3331 "@type" : "TechArticle" ,
34- "headline" : "streaming upload with fetch " ,
32+ "headline" : "Streaming Upload With Fetch " ,
3533 "description" : "Discover how to stream file uploads using the Fetch API. This interactive blog post includes a live, editable demo so you can experiment with streaming techniques directly in your browser." ,
3634 "author" : { "@type" :"Person" , "name" :"Matthew Richards" } ,
3735 "datePublished" : "2025-08-31" ,
3836 "dateModified" : "2025-10-15" ,
3937 "mainEntityOfPage" : { "@type" :"WebPage" , "@id" :"https://ext-code.com/blog/25-07-23/streaming-upload-with-fetch.html/streaming-upload-with-fetch.html" } ,
4038 "publisher" : { "@type" :"Organization" , "name" :"ext-code.com" , "logo" :{ "@type" :"ImageObject" , "url" :"https://ext-code.com/favicon.ico" } } ,
4139 }
42-
4340 </ script >
4441
4542
4946
5047
5148 < script src ='https://ajaxorg.github.io/ace-builds/src-noconflict/ace.js '> </ script >
52-
53-
54- < script src ='https://libs.ext-code.com/js/dom/component/component.js '> </ script >
55-
56- < script init >
57- console . clear ( ) ;
49+
50+
51+ < script src ='https://libs.ext-code.com/js/dom/component/v2.0/component.js?hdr '> </ script >
52+
53+ < script >
5854 console . log ( 'streaming-upload-with-fetch.html' ) ;
59- console . log ( ) ;
60- console . json = v => console . log ( JSON . stringify ( v , null , 4 ) ) ;
61- var version = 'v1.0' , df = true
62- ;
63-
64-
65- var ext ;
66- var $ ;
67- var datatype ;
68- var menumod ;
69- var code ;
70- var debug ;
55+ var df = true , did = 'html' ;
7156
72- var hdr ;
73- var ex ;
74-
75-
76- //:
77-
78-
79- async function init ( ) {
80- //debug('init',version);
81-
82- menu = menumod ( ) ;
83-
84- mod . base . add ( { ext, $, datatype, keydown, menu, menumod, ace} ) ;
85-
86-
87- hdr = mod [ 'blog-hdr' ] ;
88- ex = mod . ex ;
89-
90- hdr . initmod ( { ext, $} ) ;
91- ex . initmod ( { ext, $, ace, menu} ) ;
92-
93-
94- await Promise . all ( [
95- hdr . init ( ) ,
96- ex . init ( ) ,
97- ] ) ;
98-
99-
57+
58+ async function ready ( ) {
59+ debug ( 'init' ) ;
10060 await initdom ( document . body ) ;
101-
102-
61+
10362 } //init
104-
105-
106- //:
107-
108-
109- ( async ( ) => {
110-
111- mod . stack . add ;
11263
113- ( { ext} = await import ( 'https://libs.ext-code.com/js/io/ext-loader/ext-loader.m.js' ) ) ;
114-
115- var promise = ext . load . libs (
116- 'js/dom/$.js' ,
117- 'js/core/datatype.js' ,
118- 'js/dom/menumod/menumod.js' ,
119- 'js/dom/keydown/keydown.js' ,
120- 'js/dom/code/v2.0/code-v2.0.js.api' ,
121- 'js/debug/debug.js' ,
122- ) ;
123- [ $ , datatype , menumod , keydown , code ] = await promise ;
124-
125- code . initmod ( { ext, $, datatype, menumod} ) ;
12664
127- mod . stack . complete ;
128-
129- } ) ( ) ;
130-
131-
132- </ script init>
133-
134-
135-
136-
137- < link rel =stylesheet href ='/blog/css/blog.css '>
65+ </ script >
13866
139- < style >
14067
141- html
142- {height : 100% ;font-family : arial}
143- body
144- {min-height : calc (100% - 40px );display : flex;flex-direction : column;gap : 10px ;margin : 20px ;align-items : center;
145- padding-bottom : 200px ;
146- }
147- body > *
148- {max-width : 1400px ;width : 100% ;padding : 0 20px ;}
149-
150-
151- code
152- {display : block;border-radius : 5px ;background : whitesmoke;font-family : monospace;padding : 10px ;white-space : pre;
153- margin : 20px 0 ;
154- }
155-
156-
157- a .link-stable
158- {color : blue}
159- .link-domain
160- {font-size : 12px }
161- .link-txt
162- {}
163-
164-
68+ < link rel =stylesheet href ='../../css/blog.css ' crossorigin =anonymous >
69+
70+ < style >
16571 </ style >
16672
16773 </ head >
16874
16975
17076 < body >
171-
77+
17278 < blog-hdr component =grp1 >
17379 < h1 class =title >
174- streaming upload with fetch
80+ Streaming Upload With Fetch
17581 </ h1 >
176- < time slot =date datetime =" 2025-10-15 " >
177- 15 Oct 2025
82+ < time slot =date datetime =2026-02-03 >
83+ 03 Feb 2026
17884 </ time >
17985 </ blog-hdr >
180-
181-
86+
87+
18288
18389
18490 < p >
185-
186- Discover how to stream file uploads using the Fetch API. This interactive blog post includes a live, editable demo so you can experiment with streaming techniques directly in your browser.
91+
92+ Discover how to stream file uploads using the Fetch API. This interactive blog post includes a live, editable demo so you can experiment with streaming techniques directly in your browser.
18793 < div >
18894 requires http2 on the server
18995 < a href =''>
@@ -194,27 +100,22 @@ <h1 class=title>
194100 blog / how to set up HTTP/2 server in Node.js
195101 </ span >
196102 </ a >
197-
103+
198104 </ div >
199-
105+
200106 </ p >
201107
202108
203- < snippet-console id =ex src ='ex/fetch.js ' component > </ snippet-console >
204-
205-
109+ < snippet-console component id =ex src ='ex/fetch.js '> </ snippet-console >
110+
111+
206112 </ body >
207113
208114
209115 < script >
210116
211117
212118 function initdom ( rootnode ) {
213-
214- hdr . initdom ( ) ;
215-
216- ex . initdom ( null , { fullsize :true } ) ;
217-
218119 } //initdom
219120
220121
0 commit comments