0

我正在使用 express.js 和 uploadify 将大文件上传到节点服务器,一切正常,除非有多个用户登录并尝试同时上传文件,它仍然有效,但似乎服务器只能上传一个文件一次,所以用户必须等到其他用户完成上传,这是无法接受的。

这是服务器端代码

exports.upload = function(req, res,next){
    // console.log( req.body);
    // console.log(req.files);
    var tmp_path = req.files.product_video.path;
    var target_path = 'F:/shopping/shop/' +req.body.shop_id+'/'+ req.files.product_video.name;

    fs.rename(tmp_path, target_path, function(err) {
        if (err) {
            console.log(err)
        }
        else{
            fs.unlink(tmp_path, function() {
                if (err){
                    console.log(err)
                }else{
                    exec("C:/ffmpeg/bin/ffmpeg -i shop/"+ req.body.shop_id+ '/' + req.files.product_video.name  + " -ss 00:01:00.00 -r 1 -an -vframes 1 -s 250x150 -f mjpeg shop/"+ req.body.shop_id+ '/'  + req.files.product_video.name  + "_thumbnail.jpg", function(err){

                        var data = {
                            'thum_src':'shop/'+ req.body.shop_id+ '/'  + req.files.product_video.name  + "_thumbnail.jpg",
                            'video_name':req.files.product_video.name,
                        }
                        res.send(data);
                    });
                }
            });
        }

    });
};

这是前端代码

 $('#input_product_video').uploadify({
        'formData':{'shop_id':$('#shop_id').val()},
        'buttonText'    : 'add',
        'fileSizeLimit' : '100MB',
        'fileObjName' : 'product_video',
        'uploader'    : '/uploads',
        'swf'         :'/public/javascripts/lib/uploadify/uploadify.swf',
        'onUploadSuccess':function(file,data){
             console.log(file);
             console.log(JSON.parse(data));
             console.log(response);

        }
    });
4

1 回答 1

0

您不需要fs.unlink调用,因为fs.rename它将文件移动到正确的路径,而不是复制它,所以如果fs.rename成功,临时文件将已经消失。删除整个fs.unlink块,无论如何它都不会检查错误。然后,您需要确保在代码的每个可能路径中,您要么调用next(err)错误,要么调用res.send. 看起来这里有一些代码路径,您不会响应,只会让请求超时。进行这些更改,看看是否可以正常工作。

于 2012-11-14T03:29:30.833 回答