【问题标题】:Nodejs Express Multer file upload - handle response in route based on form dataNodejs Express Multer 文件上传 - 基于表单数据处理路由响应
【发布时间】:2018-10-03 01:36:34
【问题描述】:

我目前的实现如下:

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,并以唯一的文件名将其保存到磁盘。

然而...

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

filename: function (req, file, cb) {

所以我不能将我的代码移动到这个函数中。

TLDR: post 函数需要捕获 req.body.item_id 和 req.file。如果 req.body.item_id == value 而不是保存文件和 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')
            })
        }

编辑:交换参数的顺序,以便 body 参数是第一个: fd.append("item_id", '11'); fd.append("图片", files[0]);

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

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

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

    filename: function (req, file, cb) {

    我已经测试过了,它有效,该范围内的值不是undefined

    【讨论】:

    • 不。 req.body.item_id 在路由之外是明确未定义的,并且已定义,从前端返回正确的值,在路由内部。更新帖子以反映我的前端 js
    • 通过在前端改变我的表单对象属性的顺序来解决。
    猜你喜欢
    • 2018-07-21
    • 2021-03-08
    • 2016-09-14
    • 2017-03-20
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多