Eine große Datei wird im Browser (mit Datei.Slice) in Browser aufgeteilt, und jeder Chunk wird zusammen mit einigen anderen Informationen wie Dateiname, Chunk -Index, Gesamtzahl der Chunks an den Server gesendet.//
const pending = new Map();
async function handleReq(req: Request){
// example query params (coming from req)
const query = {
index: 4,
numChunks: 10,
name: "test.mp4",
}
// data comes from blob from FormData
const bytes = await query.blob.bytes();
const chunkDir = path.join(`chunks_${query.name}`);
let numUploaded = pending.get(chunkDir) ?? 0;
const chunkPath = path.join(chunkDir, String(query.index));
await Deno.writeFile(chunkPath, bytes, { mode: 0o644 });
numUploaded++;
pending.set(chunkDir, numUploaded);
if (numUploaded !== query.numChunks) {
return { completed: false };
}
// this is the last chunk, combine all chunks together in finalFile
const finalFile = query.name;
const fh = await Deno.create(finalFile);
for (let i = 0; i < query.numChunks; i++) {
const bytes = await Deno.readFile(path.join(chunkDir, String(i)));
await fh.write(bytes);
}
fh.close();
pending.delete(chunkDir);
await Deno.remove(chunkDir, { recursive: true });
return { completed: true };
}
< /code>
Also steckt jedes Stück in eine Datei, und wenn alle Stücke in die endgültige Datei verbunden sind. Dies würde viele zusätzliche Lesevorgänge und schreibt auf der Festplatte vermeiden.>
Umgang mit großem Datei -Hochladen in Deno effizient ⇐ JavaScript
-
- Similar Topics
- Replies
- Views
- Last post