Topics in this section
How ReadableStream bodies, duplex half and TransformStream backpressure change browser uploads — and the cases where buffering a Blob still wins.
Explore topic →Establish what a file really is before it leaves the browser — where File.type comes from, how to read magic bytes, and why the server still decides.
Explore topic →Build an accessible drop zone in TypeScript — dragover preventDefault, DataTransfer, paste-to-upload, keyboard fallback, and the gotchas that break drops.
Explore topic →How File and Blob really hold bytes in the browser — the backing store, why slice is free, what type is worth, and how to hand a Blob to the network.
Explore topic →Every hop between a browser and object storage has its own request-body ceiling. Find them, size your parts against them, and stop losing uploads to 413s.
Explore topic →How fetch turns a File, FormData or stream into bytes on the wire, when its promise actually resolves, and which RequestInit options decide upload behaviour.
Explore topic →Base64 costs exactly 33% on the wire and up to 5x in browser memory. Here is the mechanism, the real numbers, and when text encoding still wins.
Explore topic →Set upload deadlines the browser actually honours, classify what failed, and retry with full jitter — without duplicating writes or starting a retry storm.
Explore topic →The RFC 7578 wire format byte by byte — how FormData serialises, what each part costs, and the boundary, filename and 413 failures that follow.
Explore topic →