如何使用 multer 将文件从邮递员发送到 node.js
How do I send a file from postman to node.js with multer
Windows
快递 4.12.4
穆尔特 1.0.1
节点 v0.10.22
我正在尝试使用邮递员将文件发送到我的 node.js 服务器。
我正在尝试遵循自述文件 here
这是我用邮递员发送的内容:
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);
});
});
}
当我通过邮递员到达这条路线时,我得到 req.body
的 {}
和 req.file
的 undefined
。
我做错了什么?
这是我初始化传递给路由文件的 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
记录任何内容
Postman截图中,文件字段名称缺失。密钥应该是 csv
,因为 Multer 接受具有该名称的单个文件。
这会对像我一样正在寻找类似答案的其他人有所帮助。
我使用了 curl 请求而不是 Postman。
curl -v -F csv=@file.csv http://localhost/url
Postman 似乎有问题。
https://github.com/expressjs/multer/issues/317
I also have this issue when I use Postman to send file using form-data. The attribute req.file or req.files is always undefined. If anyone has used Postman and was able to retrieve the file using req.file or req.files, please comment.
只需从邮递员中删除 header Content-Type:application/x-www-form-urlencoded。
正在从 Postman 版本 5.5.3 更新到版本 8.0.7。为我解决了这个问题。可能与版本 7 中修复的 problem 有关。
Multer
查找名为 'single' 的文件。因此,如果您在邮递员 form-data
中将密钥添加为 'single' 它应该可以工作
Windows
快递 4.12.4
穆尔特 1.0.1
节点 v0.10.22
我正在尝试使用邮递员将文件发送到我的 node.js 服务器。
我正在尝试遵循自述文件 here
这是我用邮递员发送的内容:
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);
});
});
}
当我通过邮递员到达这条路线时,我得到 req.body
的 {}
和 req.file
的 undefined
。
我做错了什么?
这是我初始化传递给路由文件的 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
Postman截图中,文件字段名称缺失。密钥应该是 csv
,因为 Multer 接受具有该名称的单个文件。
这会对像我一样正在寻找类似答案的其他人有所帮助。
我使用了 curl 请求而不是 Postman。
curl -v -F csv=@file.csv http://localhost/url
Postman 似乎有问题。
https://github.com/expressjs/multer/issues/317
I also have this issue when I use Postman to send file using form-data. The attribute req.file or req.files is always undefined. If anyone has used Postman and was able to retrieve the file using req.file or req.files, please comment.
只需从邮递员中删除 header Content-Type:application/x-www-form-urlencoded。
正在从 Postman 版本 5.5.3 更新到版本 8.0.7。为我解决了这个问题。可能与版本 7 中修复的 problem 有关。
Multer
查找名为 'single' 的文件。因此,如果您在邮递员 form-data
中将密钥添加为 'single' 它应该可以工作