Multer 和 Express/Node 文件上传
Multer and Express/Node File Upload
req.files 正在生成 null,现在 req.body 也是空白的。我在这里搜索了所有答案,但找不到太多。不幸的是,multer 文档非常缺乏,所以希望有人已经了解了我现在的情况并且知道发生了什么。
我的 router.js 文件是这样的:
var express = require('express');
var request = require('request');
var mid = require('../middleware');
var busboy = require('connect-busboy');
var fs = require('fs');
var multer = require('multer');
var upload = multer({dest: '../public/images/blog'});
var User = require('../data/models/user');
var router = express.Router();
...
...
...
...
/* POST saveblog router. */
router.post('/saveBlog', upload.any(),function(req, res, next) {
console.log(req.body, 'Body');
console.log(req.files, 'files');
var title = req.body.titleInput;
var body = req.body.bodyInput;
request.post('http://' +req.headers.host + '/api/blog', {json: {body: body, title: title, userId: req.session.userId}},
function(err, httpResponse, body) {
if (err) {
console.error('error posting blog');
}
console.log('Blog Post successfully uploaded');
});
return res.redirect('/blog');
});
module.exports = router;
所以我不太确定这有什么问题,我最初将其设置为 upload.single('image') 但那也不起作用所以谁知道呢。
这是我要提交的 jade 表格,如果有人可以提供帮助但不喜欢 jade,我相信我可以找到一个快速转换器。
form(action='saveBlog', enctype='multipart/form-data', method='post')
h1 New Blog Post
fieldset(data-role='')
label(for='title') Title
input(id='titleInput', name='titleInput', type='text', value='', placeholder='Your Title', require='true').form-control
label(for='image') Your Title Image
input(id='image',name='image', type='file', accept='image/*')
br
label(for='body') Your Article (Box is resizable)
textarea(id='mytextarea', name='bodyInput').form-control
input(type='submit', value='Post your Article').btn.btn-primary
我今天一直在研究这个。我注意到的一件事是您正在使用 upload.single()
,您要查找的数据将在 req.file
而不是 req.files
。
不过我不确定这是否是你的问题。
仅供参考,这个精简示例对我有用:
server.js
var express = require('express');
var app = express();
app.use(require('./routes'));
app.listen(8080);
routes.js
var express = require('express');
var multer = require('multer');
var upload = multer({ dest: '/tmp/' });
var router = express.Router();
/* POST saveblog router. */
router.post('/saveBlog', upload.any(), function(req, res, next) {
console.log(req.body, 'Body');
console.log(req.files, 'files');
res.end();
});
module.exports = router;
我从 Postman 发帖并得到了这个输出:
{ test: '1' } 'Body'
[ { fieldname: 'asdas',
originalname: 'vcenter.png',
encoding: '7bit',
mimetype: 'image/png',
destination: '/tmp/',
filename: '92f425268efaa45cad31f67ec8f14c2d',
path: '/tmp/92f425268efaa45cad31f67ec8f14c2d',
size: 54834 } ] 'files'
只需将 req.file
重命名为 req.files
。它对我有用。
req.files 正在生成 null,现在 req.body 也是空白的。我在这里搜索了所有答案,但找不到太多。不幸的是,multer 文档非常缺乏,所以希望有人已经了解了我现在的情况并且知道发生了什么。
我的 router.js 文件是这样的:
var express = require('express');
var request = require('request');
var mid = require('../middleware');
var busboy = require('connect-busboy');
var fs = require('fs');
var multer = require('multer');
var upload = multer({dest: '../public/images/blog'});
var User = require('../data/models/user');
var router = express.Router();
...
...
...
...
/* POST saveblog router. */
router.post('/saveBlog', upload.any(),function(req, res, next) {
console.log(req.body, 'Body');
console.log(req.files, 'files');
var title = req.body.titleInput;
var body = req.body.bodyInput;
request.post('http://' +req.headers.host + '/api/blog', {json: {body: body, title: title, userId: req.session.userId}},
function(err, httpResponse, body) {
if (err) {
console.error('error posting blog');
}
console.log('Blog Post successfully uploaded');
});
return res.redirect('/blog');
});
module.exports = router;
所以我不太确定这有什么问题,我最初将其设置为 upload.single('image') 但那也不起作用所以谁知道呢。
这是我要提交的 jade 表格,如果有人可以提供帮助但不喜欢 jade,我相信我可以找到一个快速转换器。
form(action='saveBlog', enctype='multipart/form-data', method='post')
h1 New Blog Post
fieldset(data-role='')
label(for='title') Title
input(id='titleInput', name='titleInput', type='text', value='', placeholder='Your Title', require='true').form-control
label(for='image') Your Title Image
input(id='image',name='image', type='file', accept='image/*')
br
label(for='body') Your Article (Box is resizable)
textarea(id='mytextarea', name='bodyInput').form-control
input(type='submit', value='Post your Article').btn.btn-primary
我今天一直在研究这个。我注意到的一件事是您正在使用 upload.single()
,您要查找的数据将在 req.file
而不是 req.files
。
不过我不确定这是否是你的问题。
仅供参考,这个精简示例对我有用:
server.js
var express = require('express');
var app = express();
app.use(require('./routes'));
app.listen(8080);
routes.js
var express = require('express');
var multer = require('multer');
var upload = multer({ dest: '/tmp/' });
var router = express.Router();
/* POST saveblog router. */
router.post('/saveBlog', upload.any(), function(req, res, next) {
console.log(req.body, 'Body');
console.log(req.files, 'files');
res.end();
});
module.exports = router;
我从 Postman 发帖并得到了这个输出:
{ test: '1' } 'Body'
[ { fieldname: 'asdas',
originalname: 'vcenter.png',
encoding: '7bit',
mimetype: 'image/png',
destination: '/tmp/',
filename: '92f425268efaa45cad31f67ec8f14c2d',
path: '/tmp/92f425268efaa45cad31f67ec8f14c2d',
size: 54834 } ] 'files'
只需将 req.file
重命名为 req.files
。它对我有用。