Nodejs Express Multer文件上传-根据表单数据处理路由响应

时间:2018-10-03 01:36:35

标签: node.js express multer

我当前的实现如下:

var storage = multer.diskStorage({

    destination: function (req, file, cb) {
      cb(null, 'public/images/items/')
    },filename: function (req, file, cb) {
        let ext = ''; 
        if (file.originalname.split(".").length>1)
            ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length);
        cb(null, Date.now() + ext)
    }    
})

...正在使用路线。...

app.post('/updateItemImage', upload.single('image'), function (req, res, next) {
    console.log('user: ' + req.user.id + ' updating image: ' + req.body.item_id);
})

..好的。这样可行。 req.body.item_id存在于我的路线中,multer处理req.file,并使用唯一的文件名将其保存到磁盘。

但是 ...

仅当req.user.id和req.body.item_id具有特定值时,我才希望使用multer保存该项目。在以下范围内,未定义req.body.item_id:

filename: function (req, file, cb) {

因此我无法将代码移入该函数。

TLDR: post函数需要捕获req.body.item_id和req.file。如果req.body.item_id ==值,然后保存文件并重新发送res.send('ok'),则可以用多种方法给猫换皮。什么是可行的选择?

编辑:这是前端js:

$scope.uploadFile = function(files) {

            var fd = new FormData();

           var uploadUrl = '/updateItemImage';
           var fd = new FormData();

             fd.append("image", files[0]);
             fd.append("item_id", '11');
            $http.post(uploadUrl, fd, {
                transformRequest: angular.identity,
                headers: {'Content-Type': undefined}
            }).then(function (response) {
                if (response.data == 'ok') {
                      return
                }

                alert('something went wrong')
            })
        }

编辑:交换参数顺序,使主体参数首先出现: fd.append(“ item_id”,'11'); fd.append(“ image”,files [0]);

解决了我的问题。没关系!

1 个答案:

答案 0 :(得分:1)

  

req.body.item_id在以下范围内未定义:

     

filename: function (req, file, cb) {

我已经对其进行了测试,它可以正常工作,该值在该范围内不是undefined

enter image description here