【发布时间】:2016-06-08 16:35:49
【问题描述】:
我正在尝试将图像上传到 node.js express
- bodyParser 需要一个中间件来处理图片文件,否则会回复
令牌未定义
- 我使用 Multer 作为中间件,正如this 所说,req.file 应该是一个数组信息,我可以使用 req.file.image.path 来获取文件路径和其他信息,而不是我可以将其保存为文件。
问题来了,我从 Postman 上传了一张图片,我只写了console.log(req.file) 它显示了undefined。
如果我尝试写req.file.image.path来获取文件路径,错误是image undefined,好像我没有很好地使用multer,所以req.file没有保存数据信息,我应该创建一些临时文件夹以进行 multer 或...?
app.js
var express = require('express')
,bodyParser = require('body-parser')
,app = express()
,multer = require('multer')
,binary = require('binary')
,fs = require('fs')
,util= require('util')
,http = require('http')
,multer = require('multer')
,upload = multer({ dest: '/Node/file-upload/uploads/' });
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies.
app.use(bodyParser.json({limit: '5mb'}));
songs = require('./routes/route');
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
app.post('/upload',songs.upload);
route.js
var mongoose = require('mongoose');
var uri = "mongodb://1111:1111@ds061365.mongolab.com:61365/aweitest";
mongoose.connect(uri);
// we're connected!
var db = mongoose.connection.db;
var BSON = require('bson').BSONPure;
var binary = require('binary');
var body = require('body-parser');
var fs = require('fs');
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, '/Node/file-upload/uploads/');
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now());
}
});
var upload = multer({ storage : storage}).single('image');
db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
db.once('open', function() {
console.log("mongodb is connected!!");
});
exports.upload = function(req, res) {
upload(req,res,function(err) {
console.log(req.file);
fs.readFile(req.file.image.path, function (err, data){
var dirname = "/Node/file-upload/uploads/";
var newPath = dirname + req.body.filename;
fs.writeFile(newPath, data, function (err) {
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
});
});
};
错误
TypeError: Cannot read property 'image' of undefined
at c:\Users\awei\WebstormProjects\untitled\routes\girlshanlder.js:107:28
【问题讨论】:
-
您能与我们分享您的 html 表单吗?
-
我使用邮递员上传二进制图片文件,内容类型设置为image/jpeg
-
尝试将
req.file.image.path更改为req.file.path(在exports.upload 块内)并创建/Node/file-upload/uploads/文件夹? -
@danilodeveloper 也是一样,如果我登录 req.file ,它是未定义的,所以我不知道,我检查了 multer github,很少有人有同样的问题,有和中间件上传推荐?
-
来自 github repo 注意:在将目标提供为函数时,您负责创建目录。传递字符串时,multer 将确保为您创建目录。您是否创建了 dest 文件夹?
标签: javascript node.js express multer