使用multer

时间:2016-04-26 21:48:56

标签: javascript node.js express file-upload multer

我正在尝试将文件上传到磁盘中的特定目录。我正在使用multer库。并且据我所知,这个代码以及它在获取请求时的样子如何从它获取文件并尝试保存它并且它与请求的其余部分分开发生。有没有办法获得完全请求,让我们说目的地功能(#1)。这是我的代码

var storage = multer.diskStorage({
   destination: function (req, file, callback) {
      console.log(req) // #1 here i dont see other fields from request
      callback(null, './uploads')
    },
    filename: function (req, file, callback) {
       callback(null, Date.now() + '-' + file.originalname)
    }
})

var upload = multer({ storage: storage }).single('file')

router.post('/api/photos', function (req, res, next) {
   upload(req, res, function(err) {
       console.log(req) // here i see other fields from request like req.body.description
       if (err) {return next(err)}
       res.json(201)
   })
});

我想要实际做的是说更多。 '嘿,我希望你将文件保存在目录/ uploads / restOfThePat'中。其中restOfThePath在请求中传递。

我知道我可以稍后更改文件位置(没试过这个,不知道它是否有效)。然而,它似乎有点hacky,我不能相信它是不可能任何其他更清洁的方式。显然,multer不是必须的,如果还有其他库我想看看。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

var storage = multer.diskStorage({
   destination: function (req, file, callback) {
      console.log(req);
      callback(null, req.body.what_you_want);
    },
    filename: function (req, file, callback) {
       callback(null, Date.now() + '-' + file.originalname);
    }
})

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

router.post('/api/photos', upload.single('the_name') function (req, res, next) {
   upload(req, res, function(err) {
       console.log(req) // here i see other fields from request like req.body.description
       if (err) {return next(err)}
       res.json(201)
   })
});

它就像一个魅力......