【问题标题】:Multer isn't passing in express put routeMulter 没有通过 express put 路线
【发布时间】:2017-05-28 04:34:28
【问题描述】:

我正在尝试使用 Multer 将图像上传到文件系统。请看一下我的路线中的相关数据:

const
  ..
  multer = require('multer'),
  ..;

const storage = multer.diskStorage({
    destination: function (req, file, callback) {
      callback(null, './uploads');
    },
    filename: function (req, file, callback) {
      callback(null, req.params.id + file.originalname);
    }
  }),
  upload = multer({storage: storage}).single('profilePic');

router.put(
  '/:id',
  middleware.isLoggedIn,
  (req, res, next) => {

    User
      .findByIdAndUpdate(
        req.params.id, req.body.user,
        (err, updatedUser) => {
          if (err) {
            return req.flash('error', err.message);
          }

          upload(req, res, (err) => {
            if (err) {
              eval(locus);
              return req.flash('error', err.message);
            }
            updatedUser = req.body.user;
            eval(locus);

            //redirect show page
            res.redirect('/dashboard/profile/' + req.params.id + '/edit');
          });
        });
  });

module.exports = router;

当我查看 updatedUser 时,我首先看到的是 { profilePic: 'data:image/jpeg;base64,....}我做错了什么?既然我在这里有上传功能,它甚至都没有更新页面。我真正想做的是让目的地在 s3 上工作,但我需要先保存它。

【问题讨论】:

  • 你在前端使用什么...我的意思是 angular.js 或其他什么???。
  • 不。只有 ejs 和 jquery。

标签: express multer multer-s3


【解决方案1】:

所以,这是使用multer 上传图片的最基本示例:

var express = require('express')
var multer = require('multer')
var app = express()

var storage = multer.diskStorage({
  // define where the file should be uploaded, else it will be uploaded to the system temp dir
  destination: function (req, file, cb) {
    // ./uploads should be created beforehand
    cb(null, './uploads')
  },
  // define "filename", else a random name will be used for the uploaded file
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + file.originalname)
  }
})

var upload = multer({ storage: storage })

// pic is the name of image field in the form
app.put('/profile', upload.single('pic'), function (req, res, next) {
  console.log(req.file)
  res.send('Uploaded')
})

app.listen(3000)

这是一个示例curl 命令,用于将图像从文件系统上传到上述应用程序:

curl -X PUT -F 'pic=@/projects/eg/foto.png' localhost:3000/profile

确保示例运行良好,以确保您了解multer 如何处理文件上传,并且问题不在于multer

话虽如此,User.findByIdAndUpdate 似乎将图像数据作为 base64 编码字符串存储在某处;我不知道User.findByIdAndUpdate 连接到什么。它超出了multer 的域。

我们的 Gitter 频道 (https://gitter.im/expressjs/express) 上的某个人可能会提出一些建议。加入我们吧。

【讨论】:

  • 当然,User.findByIdAndUpdate 是猫鼬。但是,现在我以全新的眼光看待这个,我有了一个想法。
  • 这是什么想法,因为我试图完成同样的事情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 2022-08-19
  • 1970-01-01
  • 2021-03-17
  • 2016-04-16
  • 2015-12-31
相关资源
最近更新 更多