Umgang mit großem Datei -Hochladen in Deno effizientJavaScript

Javascript-Forum
Anonymous
 Umgang mit großem Datei -Hochladen in Deno effizient

Post by Anonymous »

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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post