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

Upload images to Node.js using multer doesn't work

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

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

token undefine

  1. 我使用 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

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

干杯。

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

只需定义模块并安装 multer 和路径并保存即可。

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);
    });