3

Express 3 で作成されたアプリケーションに取り組んでいますが、現在 Express 4 にアップグレードしていますが、ファイルのアップロードに問題があります。ローカル コンピューターの Mac OSX ではすべてが機能しますが、ubuntu の運用サーバーでは機能しません。

png と psd を含む zip ファイルをアップロードしています。

マルチパート形式でファイルをアップロードしています: 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 が接続を切断しています。

誰かがおそらく同様の問題を抱えていて、解決策を見つけましたか? ありがとう

4

1 に答える 1

6

おそらく、「watch」オプションが有効になっている pm2 があります。監視ディレクトリ内にファイルをアップロードします。その後、pm2 は、新しいファイルの書き込みを開始するたびにアプリケーションを再起動します (コードのリロードのため)。

それがあなたの問題を解決するかどうかを確認するには、jour process.json から "watch": true を削除するか、コマンド ラインからフラグ --wath を削除します。動作している場合は、 https ://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#watch--restart で pm2 watch ignores について読み、環境とアプリ用に適切に構成します。

于 2015-04-14T10:44:36.370 に答える