使用multer将上传的文件保存在项目目录中

时间:2016-05-10 10:30:59

标签: node.js multer

我可以使用名为multer的中间件上传node.js中的文件。但是当我给出目标路径时:'/ uploads /'。文件保存在c:drive

var express = require('express');
var router = express.Router();


var multer = require('multer');
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
   cb(null, '/uploads/')
   },
   filename: function (req, file, cb) {
     cb(null, file.originalname)
   }
 })

  var upload = multer({storage: storage});

   var emp = require('../models/employees.js');

  router.post('/', upload.single('file'), function(req,res,next){
    console.log("Server: got file ");
    console.log(req.file);
    var upl = new emp({picture: req.file.originalname});
         upl.save(function(err,docs) {
           if (err) {
            console.log(err);
            }
              res.json(docs);
         });
  });
  module.exports = router;

我试图给出一个很长的字符串路径

'/users/user/webstormprojects/template/public/uploads/image/'

但它以内部服务器错误结束 有人请帮助我,以便我能够将上传的文件保存到我的项目目录中。

2 个答案:

答案 0 :(得分:1)

尝试使用Path Module.And然后使用_dirname。请参阅下面的代码

var path = require('path')
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
   cb(null, path.join(__dirname + '/uploads/'))
   },
   filename: function (req, file, cb) {
     cb(null, file.originalname)
   }
})

var path = require('path') var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname + '/uploads/')) }, filename: function (req, file, cb) { cb(null, file.originalname) } })

这应该可以解决您的问题。 _dirname将允许您访问您正在使用的目录。

答案 1 :(得分:0)

在app.js或index.js文件中添加此行

app.use(express.static(__dirname + '/public', { maxAge: week }));

然后将您的文件上传到 / uploads 这样的

destination: function (req, file, callback) {
    callback(null, './public/uploads');
},

注意:请确保公共文件夹中有上传文件夹