2016-02-25 133 views
1

我试图将图片上传到node.js的表达上传图片到Node.js的使用multer不起作用

  1. bodyParser需要中间件来处理图像文件,或将回复

令牌取消定义

  • 我使用Multer作为中间件,如this所说,req.fil e应该打开一个信息数组,比我可以使用req.file.image.path获取文件路径和其他信息,比我可以将它保存为一个文件。
  • 这是问题所在,我从邮递员上传图片,我只写console.log(req.file)它显示undefined

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

    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:[email protected]: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 
    
    +0

    您可以与我们分享您的html表单吗? – danilodeveloper

    +0

    我使用邮递员上传一个二进制图像文件,内容类型设置为图像/ jpeg –

    +0

    尝试将'req.file.image.path'更改为'req.file.path'(位于exports.upload块内)并且创建了'/ Node/file-upload/uploads /'文件夹? – danilodeveloper

    回答

    0

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

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

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