17

Windows
Express 4.12.4
Multer 1.0.1
节点 v0.10.22

我正在尝试使用邮递员将文件发送到我的 node.js 服务器。

我正在尝试按照这里的自述文件

这是我与邮递员一起发送的内容:

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

16

只需从邮递员中删除标头Content-Type:application/x-www-form-urlencoded即可。

在此处输入图像描述

于 2018-03-23T16:47:44.567 回答
14

在 Postman 屏幕截图中,缺少文件字段名称。关键应该是csv因为 Multer 接受具有该名称的单个文件。

于 2015-07-30T23:49:04.387 回答
10

这将帮助像我这样正在寻找类似答案的其他人。

我使用 curl 请求而不是 Postman。

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

邮递员似乎有问题。

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 回答
-1

Multer查找名为“single”的文件。因此,如果您在邮递员中将密钥添加为“单个”,form-data它应该可以工作

于 2021-08-10T23:56:36.763 回答