0

我正在尝试将上传的图像从客户端发送到服务器。我这样做是这样的:

...
var files = document.getElementById('myForm').files;
var formData = new FormData();
formData.append('image', files[0]);
$.ajax({
    url: '/upload',
    data: formData,
    processData: false,
    contentType: false,
    type: 'POST',
    success: function(data){
        alert(JSON.stringify(data));
    }
});
...

在我正在使用的服务器中Express。然后,要访问服务器上上传的文件,我使用connect-busboy模块:

...
router.post('/upload', function(req, res, next) {
  req.pipe(req.busboy);
  req.busboy.on('file', function (fieldname, file, filename) {
    //do something
  });
  req.busboy.on('filesLimit', function(){
    //do something
  });
});
...

为了设置上传文件的文件大小限制,我fileSize在 connect-busboy 构造函数中将选项设置为 3 mb:

...
app.use(
    busboy({
      limits: {
        fileSize: 3*1024 //3 mb
      }
    })
);
...

问题是当我上传大小大于 3 mb 的图像时,filesLimit事件不会触发。更糟糕的是,file此时事件触发并且(!)只有 3 mb 的文件可用。

怎么了?为什么filesLimit事件不触发?谢谢你的帮助!

4

1 回答 1

1

回答我自己的问题。

我以错误的方式附加了文件大小限制事件侦听器。事实证明,我们应该以这种方式将事件附加到作为流的文件对象上。

req.busboy.on('file', function (fieldname, file, filename) {
    file.on('limit', callback); // <- here is
});
于 2016-07-21T15:54:16.810 回答