【问题标题】:multer file upload not workingmulter文件上传不起作用
【发布时间】:2016-04-11 01:54:39
【问题描述】:

routes.js

module.exports=function(app, upload){

        var postingsController=require('../controllers/postings.server.controller');

        app.post('/postings', postingsController.savePosting);

    }

controller.js

var multer=require('multer');

    exports.savePosting=function(req, res, next){

      // this diskstorage function is not at all executed
        var storage = multer.diskStorage({
            destination: function (req, file, cb) {
                cb(null, './uploads')
            },
            filename: function (req, file, cb) {
                console.log(file);
                cb(null, file.filename + '.' + 'jpg');
            }
        });

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

        res.json({ message: "success" });

    }

谁能告诉我是哪一行上传了文件。我是否在主 express 配置文件中写入 multer diskstorage 配置,或者我可以在任何地方写入。顺便说一句,我可以看到来自该行的 json 响应

【问题讨论】:

    标签: javascript node.js express multer


    【解决方案1】:

    通常,中间件是在任何实际路由处理程序之外创建和插入的。例如:

    routes.js

    var multer = require('multer');
    
    var storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, './uploads')
      },
      filename: function (req, file, cb) {
        console.log(file);
        cb(null, file.filename + '.' + 'jpg');
      }
    });
    var upload = multer({ storage: storage });
    
    module.exports = function(app, upload) {
      var postingsController = require('../controllers/postings.server.controller');
    
      app.post('/postings',
               upload.single('attachment'),
               postingsController.savePosting);
    };
    

    controller.js

    exports.savePosting = function(req, res, next) {
    
      // Use `req.file` to access attachment
    
      if (req.file)
        res.json({ message: "success" });
      else // no file uploaded
        res.json({ message: "failure" });
    };
    

    【讨论】:

      【解决方案2】:


      Multer 是一个中间件,这意味着它在大多数情况下作为参数添加到您的路由中。所以实际的语法是这样的:
      app.post ("/postings", multer ({ ... }), postingsController.savePosting);
      Multer 在对“/postings”的请求和为您完成所有文件工作的最终函数之间被调用。然后它将通过
      req.files["fileInputName"]
      为您提供所有信息 在以下中间件中(您的函数也是“中间件”)。

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 2015-11-18
        • 2018-02-25
        • 2015-03-09
        • 1970-01-01
        相关资源
        最近更新 更多