文件上传在生产代码上挂起但在本地工作 - multer,node.js

时间:2015-04-14 10:13:06

标签: node.js file-upload multer body-parser express-4

我正在编写一个用快递3编写的应用程序,现在我们升级到快递4,我有一个问题,即上传文件。一切都在我的本地计算机mac OSX上运行,但在ubuntu上的生产服务器上不起作用。

我正在上传zip文件,里面有png和psd。

我是通过multipart形式上传文件:使用multer中间件。

在当地一切都很好,但在生产环境中,连接正在破裂。文件开始上传到主上传根,但作为一个块的一部分,例如我上传50 MB的zip文件,但上传大约30 kb并且连接中断,因为上传数据作为块的onFileDataupload事件是中断。

app.js中的

设置

我的身体解析器设置:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }) );

我的定制器设置:

app.use(multer({
dest: './upload',
limits: {
fieldNameSize: 500,
files: 2,
fields: 20,
fileSize: 200 * 1024 * 1024
},
rename: function (fieldname, filename) {
  return fieldname + filename + Date.now();
},
onFileUploadStart: function (file) {
 console.log('Upload starting for filename: ' + file.originalname);
},
onFileUploadData: function (file, data) {
  // console.log(data.length + ' of ' + file.fieldname + ' arrived')
},
onParseStart: function () {
  console.log('Form parsing started at: ', new Date())
},
onParseEnd: function (req, next) {
 console.log('Form parsing completed at: ', new Date());
  // usage example: custom body parse
  //req.body = require('qs').parse(req.body);
  // call the next middleware
  next();
},
onFileUploadComplete: function (file) {
  console.log(file.fieldname + ' uploaded to ' + file.path);
},
onFileSizeLimit: function (file) {
  console.log('Failed: ', file.originalname)
  fs.unlink('./' + file.path) // delete the partially written file
},
onFilesLimit: function () {
  console.log('Crossed file limit!')
},
onFieldsLimit: function () {
  console.log('Crossed fields limit!')
},
onPartsLimit: function () {
  console.log('Crossed parts limit!')
},
onError: function(error, next) {
  console.log("Error occurred while uploading the file!!");
  next(error);
  } 

}));

我也尝试过强大的替代品,我有同样的问题,在当地工作,不在生产环境上工作。我认为这可能是节点请求管理的问题。在生产环境中我们使用pm2。 Smoething正在打破文件上传时的连接。

有没有人有maby类似的问题并找到解决方案? 感谢

1 个答案:

答案 0 :(得分:3)

你可能有pm2启用了“watch”选项;并在监视目录中上传文件。 然后pm2每次开始编写新文件时重启应用程序(因为代码重新加载)。

要检查是否解决了你的问题,只需从jour process.json中删除“watch”:true或从命令行中删除flag -wath。如果它正常工作,请阅读pm2 watch忽略此处:https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#watch--restart,并为您的env& amp;应用