概述FSA 的 `createWritable` 提供可写流能力。本文展示分块写入、进度回调与取消控制。分块写入与取消const supportsFSA = typeof window.showSaveFilePicker === 'function';
async function saveStream(name, file, size = 1024 * 1024, onProgress, signal) {
if (!supportsFSA) throw new Error('FSA unsupported');
const handle = await window.showSaveFilePicker({ suggestedName: name });
const ws = await handle.createWritable();
let o = 0, sent = 0;
while (o < file.size) {
if (signal && signal.aborted) { await ws.close(); throw new DOMException('aborted','AbortError'); }
const b = file.slice(o, o + size);
const ab = await b.arrayBuffer();
await ws.write(new Uint8Array(ab));
o += size; sent += b.size; onProgress && onProgress(sent);
}
await ws.close();
}

发表评论 取消回复