// 断点续传的核心思想是通过记录文件上传的进度,当网络中断或其他原因导致上传中断后,可以从上次中断的地方继续上传。
// 以下是使用 XMLHttpRequest 实现断点续传的示例代码:
function uploadFile(file, chunkSize = 1024 * 1024) {
let xhr = new XMLHttpRequest();
let offset = 0; // 记录已上传的字节数
function uploadChunk() {
if (offset >= file.size) {
console.log('Upload completed');
return;
}
let blob = file.slice(offset, offset + chunkSize);
let formData = new FormData();
formData.append('file', blob);
formData.append('offset', offset);
xhr.open('POST', '/upload', true);
xhr.upload.onprogress = function(event) {
if (event.lengthComputable) {
console.log(`Uploaded ${event.loaded} of ${event.total}`);
}
};
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
offset += chunkSize;
uploadChunk(); // 递归调用继续上传下一个分片
}
};
xhr.send(formData);
}
uploadChunk();
}
// 使用示例:
let fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', function(e) {
let file = e.target.files[0];
if (file) {
uploadFile(file);
}
});
offset
并继续上传下一个分片。此代码展示了如何实现一个简单的断点续传功能,适用于小文件上传场景。对于大文件或更复杂的场景,建议使用更成熟的库如 resumable.js
或 tus.js
。
上一篇:js 父元素
下一篇:js promise 同步
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站