6

ファイルのアップロードに Multer モジュールを使用しています。すべて問題なく動作しますが、github ページの最後に次のような警告があります。

これは私を本当に心配させました。ファイルがアップロードされ、req.body が使用可能になったことを .post ミドルウェアに知らせる方法が見つかりません。これが私のコードです:

app.js:

app.use(multer({ 
        dest: './uploads/',
        rename: function (fieldname, filename) {
            return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
        },
        putSingleFilesInArray: true       
        })
);

アップロード.js:

router.route('/')
    .get(function(req, res){
        res.render('uploads');
    })
    .post(function(req, res){
        //how to wait here for the file to upload?
    });

私は onParseEnd を認識していますが、それを実装する方法がわからないため、アップロードプロセスが終了していることについて少なくとも何らかの情報を持っています。

4

4 に答える 4

6

Multer はルーターチェーンの一部です。これは、express が最初に multer を実行し、multer がフォームの解析を完了すると、.post()ハンドラに対して実行を継続することを意味します。ページ上の警告は、req.bodyマルチター コールバックなどからアクセスするためのonFileUploadData()ものです。したがって、実行の順序は次のとおりです。

  • onParseStart
  • onFileUploadStart/onFileUploadData...
  • onFileUploadComplete
  • onParseEnd
  • あなたの.post()ハンドラー
于 2015-05-26T12:19:38.930 に答える
2

ドキュメントを正しく理解している場合、警告は、multer 自体に渡すことができるイベント ハンドラーにのみ適用されます。リクエストがハンドラーに到達すると、multer は既に実行されており、すべてのファイルがアップロードされています。

たとえば、renameすでに使用しているイベントに問題がありますが、この関数は実際には 4 つの引数を受け取りますfieldname, filename, req, res。つまり、完全に解析される前にリクエストにアクセスできます。

于 2015-05-08T13:05:11.557 に答える
-1

あなたはそれを簡単に知ることができます.multerで利用可能なオプションがあります

  • onFileUploadComplete(ファイル、要求、解像度)

これを使用して、ここから応答を送信できます。

https://github.com/expressjs/multer#options

    app.use(multer({
    dest: path.join(__dirname, '../uploads/fullsize'),
    rename: function (fieldname, filename) {
        return filename.replace(/\W+/g, '-').toLowerCase();
    },
    onFileUploadStart: function (file) {
        console.log(file.name + ' is starting ...');
    },
    onFileUploadComplete: function (file, req, res) {
        console.log(file.name + ' uploading is ended ...');
        console.log("File name : "+ file.name +"\n"+ "FilePath: "+ file.path)
    },
    onError: function (error, next) {
        console.log("File uploading error: => "+error)
        next(error)
    }
    onFileSizeLimit: function (file) {
        console.log('Failed: ', file.originalname +" in path: "+file.path)
        fs.unlink(path.join(__dirname, '../tmpUploads/') + file.path) // delete the partially written file
    }

}));
于 2015-04-05T07:37:00.887 に答える