jq ajax 分块上传
时间: 2023-06-28 07:08:00 浏览: 90
可以使用 jQuery 的 $.ajax() 方法和 FormData 对象来实现分块上传。
以下是一个基本的分块上传例子:
```
function uploadFile(file) {
var chunkSize = 1024 * 1024; // 1MB per chunk
var totalChunks = Math.ceil(file.size / chunkSize);
var currentChunk = 0;
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.onload = function() {
if (xhr.status === 200) {
currentChunk++;
if (currentChunk < totalChunks) {
uploadChunk(currentChunk);
} else {
console.log('Upload complete!');
}
} else {
console.log('Upload failed!');
}
};
function uploadChunk(chunk) {
var start = chunk * chunkSize;
var end = Math.min(start + chunkSize, file.size);
var chunkData = file.slice(start, end);
var formData = new FormData();
formData.append('file', chunkData);
formData.append('chunk', chunk);
formData.append('totalChunks', totalChunks);
xhr.send(formData);
}
uploadChunk(currentChunk);
}
```
上述代码中,我们首先计算出文件需要切分成多少个块,然后使用 XMLHttpRequest 对象发送每个块的数据。在每个块上传完成后,我们检查是否还有未上传的块,如果有,则继续上传下一个块,否则表示上传完成。
需要注意的是,服务器端需要支持分块上传,并且能够处理每个块的数据。在服务器端,我们可以使用类似以下的代码来接收分块上传的数据:
```
app.post('/upload', function(req, res) {
var chunk = req.body.chunk;
var totalChunks = req.body.totalChunks;
var fileData = req.files.file.data;
// ...
});
```
在实际开发中,我们可以根据具体的需求来优化分块上传的实现,例如可以使用 Web Workers 来并行上传多个块,或者使用断点续传来提高上传的可靠性等。
阅读全文