将视频从Android/IOS上传到节点服务器时出现服务器超时错误
问题描述:
我正在尝试将视频从android/IOS客户端上传到NodeJS服务器。它适用于较小的视频,但当我尝试上传视频可以说,大于50 MB时,它会抛出服务器超时错误。将视频从Android/IOS上传到节点服务器时出现服务器超时错误
我脑海中的一个可能的解决方案是增加服务器超时限制,但这似乎不是一个合适的解决方案。有没有适当的方式来从Android上传视频没有任何限制?
这是我使用的代码。
exports.create = function(req, res) {
req.setTimeout(0);
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, config.uploads.videoUpload.dest);
},
filename: function (req, file, cb) {
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, Date.now()+ '.' +extension);
}
});
var upload = multer({
storage: storage,
limits: config.uploads.videoUpload.limits,
fileFilter: function (req, file, cb)
{
if (file.mimetype !== 'image/jpeg' && file.mimetype !== 'video/mp4')
{
return res.status(400).send({
message: 'Only video files are allowed!',
error: true
});
}
cb(null, true);
}
}).single('video_file');
if (user)
{
// upload function with a callback
upload(req, res, function(uploadError) {
if (uploadError)
{
return res.status(400).send({
message: 'Error occurred while uploading Video',
error: true
});
}
else
{
return res.status(200).send({
message: 'Video uploaded Successfuly!',
error: false
});
}
});
}
else
{
res.status(400).send({
message: 'User is not signed in',
error: true
});
}
};
答
这种类型的错误往往是与服务器或网络配置做的,而不是你的代码,所以它是值得一试这个配置也和可能的,如果有一个专门的工作文件试图上传同一服务器上的例子也。
对于节点MULER方法,下面的代码进行测试,并针对Android和服务器之间的大型视频上传绝对工作:
// POST: video upload route
// multer approach
var multer = require('multer');
app.use(multer({
//Set dstination directory
dest: path.resolve(__dirname, 'public', 'uploaded_videos'),
//Rename file
rename: function (fieldname, filename) {
//Add the current date and time in ISO format, removing the last 'Z' character this usually
//includes
var dateNow = new Date();
return filename + "_" + dateNow.toISOString().slice(0,-1)
},
//Log start of file upload
onFileUploadStart: function (file) {
console.log(file.originalname + ' is starting ...')
},
//Log end of file upload
onFileUploadComplete: function (file) {
console.log(file.originalname + ' uploaded to ' + file.path)
done=true;
}
}));
router.post('/web_video_upload', function(req, res) {
//Log the request details
//Debug console.log(req.body);
//Debug console.log(req.files);
//Send a resposne
res.send('Video Uploading');
console.dir(req.files);
});
检查这个http://stackoverflow.com/questions/25332561/node-js-express-large-body-for-bodyparser有帮助。 –