3

我正在开发一个用 express 3 编写的应用程序,现在我们升级到 express 4,我在文件上传时遇到了问题。一切都可以在我的本地计算机 mac OSX 上运行,但不能在 ubuntu 上的生产服务器上运行。

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

我正在通过多部分形式上传文件:使用 multer 中间件。

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

app.js 中的设置

我的身体解析器设置:

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

我的 multer 设置:

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 正在断开连接。

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

4

1 回答 1

6

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

要检查这是否解决了您的问题,只需从 jour process.json 中删除 "watch": true 或从命令行中删除标志 --wath 。如果它正常工作,请在此处阅读有关 pm2 手表忽略的信息:https ://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#watch--restart ,并为您的环境和应用程序正确配置它。

于 2015-04-14T10:44:36.370 回答