// 大于500M的时候分块加载
readChunked(file) {
const fileSize = file.size;
const chunkSize = 1024 * 1024 * 20;
const chunks = Math.ceil(fileSize / chunkSize);
const results = [];
const reader = new FileReader();
reader.onload = () => {
if (reader.error) {
console.error('Error reading file:', reader.error);
return;
}
const chunkData = new Uint8Array((reader.result as any));
results.push(chunkData);
if (results.length === chunks) {
// 文件已读取完毕
const blob = new Blob(results, { type: 'video/mp4' });
// 这里调用接口,上传blob文件
} else {
// 继续读取下一个块
const endSize = chunkSize * results.length + chunkSize;
const nextSize = endSize < file.size ? endSize : file.size;
const nextChunk = file.slice(chunkSize * results.length, nextSize);
reader.readAsArrayBuffer(nextChunk);
}
};
reader.readAsArrayBuffer(file.slice(0, chunkSize));
}
前端使用FileReader进行大文件读取并转换为blob上传
于 2024-01-10 20:18:31 首次发布