javascript – 在sails.js中使用skipper处理上传(正在进行中)

前端之家收集整理的这篇文章主要介绍了javascript – 在sails.js中使用skipper处理上传(正在进行中)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用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,});
            }
        });
    }
},

这仍然不是最好的解决方案.我实际上发现它有些hacky.如果有人有更好的解决方案,请分享.

猜你在找的JavaScript相关文章