【问题标题】:xhr uploading progress while using expressjs multer使用expressjs multer时xhr上传进度
【发布时间】:2016-08-11 15:06:18
【问题描述】:

我正在尝试使用 XHR 跟踪上传进度,但在 event.total 的 onprogress 回调中,我只从响应标头获取 Content-Length 而不是上传文件大小:

xhr.onprogress = (event) => {
  console.log('Progress ' + event.loaded + '/' + event.total);
}

我使用 Multer 处理文件上传,默认情况下似乎无法处理文件上传: https://github.com/expressjs/multer/issues/243

所以我尝试使用进度流处理上传:

  var p = progress({ time: 1 });
  request.pipe(p);

  p.on('progress', function() {
    console.log('Progress...');
  });

但它的工作方式相同,我只在日志和 XHR onprogress event.total 获得“Progress...”。我只有 Content-Length 值而不是文件大小值。请帮忙,我不知道如何解决它!

【问题讨论】:

  • 嘿@user1341315,如果我的回答对你有帮助,请采纳。如果没有,请在您的问题中添加更多详细信息。
  • 您好@danilodeveloper,谢谢!问题是我使用的是 xhr.onprogress 而不是 xhr.upload.onprogress

标签: node.js express upload xmlhttprequest multer


【解决方案1】:

如果您想显示进度,您不需要在后端获取进度,您只需要知道您从前端发送到后端的内容,以便计算上传进度。

在您的前端 .js 或 .html 中,尝试如下操作:

var formData = new FormData();
var file = document.getElementById('myFile').files[0];
formData.append('myFile', file);
var xhr = new XMLHttpRequest();

// your url upload
xhr.open('post', '/urluploadhere', true);

xhr.upload.onprogress = function(e) {
  if (e.lengthComputable) {
    var percentage = (e.loaded / e.total) * 100;
    console.log(percentage + "%");
  }
};

xhr.onerror = function(e) {
  console.log('Error');
  console.log(e);
};
xhr.onload = function() {
  console.log(this.statusText);
};

xhr.send(formData);

在后端你只需要这样一个简单的端点:

app.post('/urluploadhere', function(req, res) {
  if(req.files.myFile) {
    console.log('hey, Im a file and Im here!!');
  } else {
    console.log('ooppss, may be you are running the IE 6 :(');
  }
  res.end();
});

Multer 也是必要的,请记住,xhr 仅适用于现代浏览器。

【讨论】:

  • 我太瞎了。我一直在想我需要将progress 监听器附加到XMLHttpRequest。您实际上需要将它附加到XMLHttpRequestupload 属性。之后一切正常。谢谢。
  • 监控客户端上传进度。如果我想监控服务器端接收到的数据的上传进度,它是如何工作的?
  • @libzz 你找到答案了吗?我在 react-expressjs-multerS3 堆栈上
  • @kyw,我发现了一些东西here,但没有更多的东西。我放弃了,最终在这个问题的接受答案中使用了相同的方式。
  • 是的,我也看到了这个答案 :) 我相信即使我能做到这一点,我仍然需要一个网络套接字来将进度百分比推送到前端。谢谢你回来@libzz!
猜你喜欢
  • 2016-03-22
  • 2020-06-17
  • 2015-08-30
  • 2017-06-20
  • 2015-05-02
  • 2021-05-21
  • 2019-03-22
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多