处理大内存图片上传时,前端JavaScript可以采用以下策略来优化用户体验和上传效率:
以下是一个简单的分片上传示例,使用了XMLHttpRequest
和FormData
:
function uploadFile(file) {
const chunkSize = 1024 * 1024; // 每个分片1MB
let offset = 0;
const totalChunks = Math.ceil(file.size / chunkSize);
function uploadChunk(chunkIndex) {
if (chunkIndex >= totalChunks) {
console.log("Upload complete!");
return;
}
const start = chunkIndex * chunkSize;
const end = Math.min(start + chunkSize, file.size);
const chunk = file.slice(start, end);
const formData = new FormData();
formData.append('file', chunk);
formData.append('chunkIndex', chunkIndex);
formData.append('totalChunks', totalChunks);
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.onload = () => {
if (xhr.status === 200) {
console.log(`Chunk ${chunkIndex} uploaded.`);
uploadChunk(chunkIndex + 1);
} else {
console.error(`Failed to upload chunk ${chunkIndex}`);
}
};
xhr.upload.onprogress = (event) => {
if (event.lengthComputable) {
const percentComplete = ((chunkIndex * chunkSize + event.loaded) / file.size) * 100;
console.log(`Progress: ${percentComplete.toFixed(2)}%`);
}
};
xhr.send(formData);
}
uploadChunk(0);
}
// 使用示例
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
uploadFile(file);
});
通过上述方法,可以有效处理大内存图片上传的问题,提升应用的稳定性和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云