17

Windows
Express 4.12.4
Multer 1.0.1
ノード v0.10.22

postman を使用して node.js サーバーにファイルを送信しようとしています。

私はこちらのreadmeに従おうとしています

これが私が郵便配達員で送っているものです:

POST /ingest HTTP/1.1
Host: localhost:3000
Cache-Control: no-cache
Postman-Token: 69dd2497-2002-56ed-30a4-d662f77dc0b0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

外観は次のとおりです。 ここに画像の説明を入力

これがnode.jsでヒットしているものです

var Ingest      = require('../controllers/ingest.js');
var multer      = require('multer');
var upload      = multer({ dest: 'uploads/',fileFilter:function(req,file,cb){
        console.log('file is',file)
        cb(null,true);
    }
});

module.exports = function (app) {
    app.post('/ingest', upload.single('test'), function(req, res, next) {
        console.log(req.body);
        console.log(req.file);
        Ingest.ingestData()
        .then(function (response){
            return res.status(200).json(response);
        });
    });
}

郵便配達員でこのルートにたどり着くと、 {}forreq.bodyundefinedforが得られreq.fileます。

私は何を間違っていますか?

appルート ファイルに渡されるを初期化する場所は次のとおりです。

var express = require('express');
var app = express();
var http = require('http');
var cfg = require('./config')();
var passport = require('passport');
var cors = require('cors');

var bodyParser = require('body-parser');

app.set('port', process.env.PORT || cfg.port);
var corsOptions = {
    origin: "*",
    allowedHeaders: ['Content-Type', 'Authorization', 'Accept', 'x-reset-token', 'x-invite-token', 'x-api-key', 'x-www-form-urlencoded'],
    credentials: true
};
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(passport.initialize());
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

多分そこに何かがそれをやっていますか?

編集:

私も試してみました

var Ingest      = require('../controllers/ingest.js');
var multer      = require('multer');
var upload      = multer({ dest: 'uploads/',fileFilter:function(req,file,cb){
        console.log('file is',file)
        cb(null,true);
    }
}).single('csv');

module.exports = function (app) {

    app.post('/ingest', function(req,res){
        upload(req, res, function(err) {
            if(err){
                console.log(err);
            }
            console.log(req.body);
            console.log(req.file);
            Ingest.ingestData()
            .then(function (response){
                return res.status(200).json(response);
            });
        });
    });

}

そして、それは役に立ちませんでした。何も記録しませんerr

4

5 に答える 5

14

Postman のスクリーンショットでは、ファイル フィールド名が欠落しています。csvMulterはその名前の単一ファイルを受け入れるため、キーは必要です。

于 2015-07-30T23:49:04.387 に答える
10

これは、同様の答えを探している私のような他の人に役立ちます。

Postman の代わりに curl リクエストを使用しました。

curl -v -F csv=@file.csv http://localhost/url

Postman に問題があるようです。

https://github.com/expressjs/multer/issues/317

Postman を使用してフォームデータを使用してファイルを送信するときにも、この問題が発生します。属性 req.file または req.files は常に未定義です。Postman を使用したことがあり、req.file または req.files を使用してファイルを取得できた場合は、コメントしてください。

于 2016-10-19T19:45:06.793 に答える
0

Postman バージョン 5.5.3 からバージョン 8.0.7 への更新。私のために問題を解決しました。バージョン 7 で修正されたこの問題に関連している可能性があります。

于 2021-03-28T19:28:07.410 に答える