将视频从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 
     }); 
    } 
}; 
+1

检查这个http://*.com/questions/25332561/node-js-express-large-body-for-bodyparser有帮助。 –

这种类型的错误往往是与服务器或网络配置做的,而不是你的代码,所以它是值得一试这个配置也和可能的,如果有一个专门的工作文件试图上传同一服务器上的例子也。

对于节点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); 
});