使用multer将图像上传到Node.js不起作用

我正尝试将图像上传到node.js express

  1. bodyParser需要一个中间件来处理图像文件,否则它会回复

令牌undefine

  1. 我使用Multer作为中间件,就像这样说,req.file应该打开一个信息数组,比我可以使用req.file.image.path获取文件path和其他信息,比我可以将它保存为一个文件。

这里是这个问题,我从邮递员上传图片,我只写了console.log(req.file) ,显示为undefined

如果我尝试写req.file.image.path来获取文件path,错误是image undefined ,好像我没有使用multer,所以req.file没有保存数据信息,我应该创build一些临时文件夹来彻底或…?

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 

如图所示,您需要在邮递员发送图像之前设置文件名

干杯。

在MySQL数据库和文件夹中上传图片的完整代码。

只需定义模块并安装切割器和path并保存即可。

 var multer = require('multer'); var path = require('path'); var storage = multer.diskStorage({ destination: function(req, file, callback) { callback(null, './uploadimages') }, filename: function(req, file, callback) { callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) } }) app.post('/imginsert',multer({ storage: storage, fileFilter: function(req, file, callback) { var ext = path.extname(file.originalname) if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') { return callback(res.end('Only images are allowed'), null) } callback(null, true) } }).single('img'), function(req, res) { /*img is the name that you define in the html input type="file" name="img" */ var data = { table_column_name(your database table column field name) :req.file }; var query = connection.query("Insert into tablename set ?" ,data,function(err, rows) { if (err) throw err; res.redirect('/blog'); }); console.log(query.sql); console.log(req.file); });