【发布时间】:2017-12-27 02:06:11
【问题描述】:
我正在使用以下代码上传文件。文件将通过 superagent 以 blob 格式发送,到达服务器后将其转换为 dataURI 并保存到 AWS S3。
files.forEach((file) => {
superagent.post('http://localhost:3030/uploads')
.attach('file', file)
.on('progress', e => {
console.log('Percentage done: ', e);
})
.end((err, res) => {
// console.log(err);
console.log(res);
});
});
文件上传正常,但进度条未正确填充。
根据屏幕截图,您可以看到 ProgressEvent 上传百分比非常快地以 100% 结束,因为前端和后端托管在同一台服务器中。
上传进度在后台继续,但方向从 14:14:08 到 14:14:14 变为“下载”而不是“上传”,并完成响应。
我也无法根据“总加载”计算进度,因为在“下载”进度期间,总为0。
尝试用 axios 替换 superagent 并遇到同样的问题。
files.forEach((file) => {
const url = 'http://localhost:3030/uploads';
const formData = new FormData();
const config = {
headers: {
'content-type': 'multipart/form-data'
},
onUploadProgress: e => {
console.log('Upload: ', e);
},
onDownloadProgress: e => {
console.log('Download: ', e);
}
};
formData.append('file', file);
axios.post(url, formData, config)
.then(res => console.log(res))
.catch(err => console.log(err));
});
我怎样才能建立一个进度条呢?我能不能断定“上传”是上传到服务器的过程,而“下载”是上传到AWS的过程?
【问题讨论】:
-
你不能用这种方式真正衡量它,也许可以试试 websockets,但在此之前阅读stackoverflow.com/a/48412965/2805357 它应该澄清这里发生了什么。
标签: javascript file-upload progress-bar axios react-dropzone