我正在使用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);
}
});
答案 0 :(得分:0)
您不应该fs.unlink
调用,因为fs.rename
会将文件移动到正确的路径,而不是复制它,所以如果fs.rename
成功,临时文件已经走了删除整个fs.unlink
块,无论如何都不会检查错误。然后,您需要确保在代码的每个可能路径中,您要么在调用next(err)
时出错,要么致电res.send
。看起来这里有代码路径,您将不会响应,只会让请求超时。进行这些更改,看看是否有效。