我使用skipper一次将多个文件上传到本地文件夹.但我遇到了一些问题.
upload: function (req,res) { if (_.isEmpty(req.session.User)){ return res.json({ //---> 1 success: 0 }); }else{ res.setTimeout(0); var MAXBYTES = 10*1000*1000; //---> 2 if (req._fileparser.form.bytesExpected > MAXBYTES){ return res.json({ success: 0,error: 'File size limit exceeded.' }); }else{ req.file('file[]').on('progress',function(event){ return event; //---> 3 }).upload({ maxBytes: MAXBYTES },function whenDone(err,uploadedFiles) { //---> 4 return res.json({ success: 1,}); }); } } },
第一个错误// —> 1如果用户未登录,我想结束此上传过程并返回success = 0.这不起作用.在客户端,请求保持挂起而没有任何响应.
第二个错误// —> 2我之前遇到过错误,如https://github.com/balderdashy/skipper/issues/36所述,所以作为一个快速解决方案我使用了github评论中使用的人.但同样在问题1中,我遇到了这个问题.如果文件大小超过MAXBYTES,我想结束这个上传过程并将success = 0返回给用户.不会回到客户端.
第三个错误// —> 3我想在进度上使用创建进度条.但我很快遇到了一些问题.首先,使用on进程会使系统速度过慢.它也导致第4步中的错误.
第四个错误// —> 4如果我们从步骤3中删除了on(‘progress’),这将按预期工作.完成上传后,它会将success = 1返回给客户端.但是,当打开(‘progress’)时,返回res …在步骤// —> 4不起作用,客户端请求再次保持挂起而没有任何响应.
几个问题:
为什么以下代码不适用于// —> 1虽然它适用于// —> 4如果开(‘进度’)不存在
return res.json({ success: 0 });
为什么正在进行的这么多会减缓上传过程?
顺便说一句,在我的客户端,我使用form.js插件.因此我的请求看起来像这样:
$('#upload').ajaxForm({ uploadProgress: function(event,position,total,percentComplete){ console.log(percentComplete); },success: function(data) { console.log(data); } });
解决方法
我花了一些时间来解决这个问题,当我这样做时,我在stackoverflow上完全忘记了我的问题.这些是我为完成这项工作所采取的一些步骤.
upload: function (req,res) { if (_.isEmpty(req.session.User)){ return res.json({ // or destroy connection as shown below success: 0 }); }else{ res.setTimeout(0); var MAXBYTES = 10*1000*1000; if (req._fileparser.form.bytesExpected && req._fileparser.form.bytesExpected > MAXBYTES) { // file size exceeded //-> also check filesize on client-size before uploading because this will not send error report back to the client req.connection.destroy(); } req.file('file[]').on('progress',function(event){ // returning anything here was unnecessary // For example jQuery form plugin's client-side `uploadProgress:` will still catch the progress }).upload({ maxBytes: MAXBYTES },uploadedFiles) { var tempFileNames = _.pluck(uploadedFiles,'fd'); if (_.isEmpty(tempFileNames)) { return res.json({ success: 0,error: '0 files selected.' }); }else{ // process upload return res.json({ success: 1,}); } }); } },