
File.slice() 方法:
function splitFile(file, chunkSize) {
const chunks = [];
let start = 0;
while (start < file.size) {
chunks.push(file.slice(start, start + chunkSize));
start += chunkSize;
}
return chunks;
} chunkIndex)依次上传。fileId)、分片索引及总分片数。localStorage或IndexedDB记录成功分片的chunkIndex。async function resumeUpload(fileId, chunks) {
const uploadedChunks = getUploadedChunksFromStorage(fileId);
const pendingChunks = chunks.filter((_, index) => !uploadedChunks.includes(index));
await Promise.all(pendingChunks.map(uploadChunk));
}Promise.all 或async/await控制同时上传的分片数量(如3~5个),避免服务器过载。async function uploadWithConcurrency(chunks, concurrency = 3) {
const uploadTasks = [];
for (let i = 0; i < chunks.length; i++) {
uploadTasks.push(uploadChunk(chunks[i]));
if (uploadTasks.length === concurrency) {
await Promise.all(uploadTasks);
uploadTasks.length = 0;
}
}
await Promise.all(uploadTasks);
}const totalSize = file.size;
let uploadedSize = 0;
const progress = (uploadedSize / totalSize) * 100;onProgress事件,使用setTimeout或requestAnimationFrame优化渲染。accept="video/*")和大小。withCredentials处理带Cookie的上传。File.slice() 支持较差,可改用ArrayBuffer处理。navigator.onLine 事件中触发重试逻辑。ReadableStream(浏览器支持较好)或FileReader逐块读取文件,避免一次性加载到内存。multer或自定义中间件处理分片。request.stream 实现流式接收。大文件上传的核心在于分片+断点续传,需结合业务场景平衡性能与用户体验。通过合理设计分片策略、优化并发控制、增强安全性,可显著提升传输成功率与用户满意度。实际开发中建议优先复用成熟库(如axios+resumable.js ),并针对性优化瓶颈环节。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。