Multer 没有通过 express put 路由
Multer isn't passing in express put route
我正在尝试使用 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 上工作,但我需要先保存它。
因此,这是使用 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) 上的某个人可能会提出一些建议。在那里加入我们。
我正在尝试使用 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 上工作,但我需要先保存它。
因此,这是使用 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) 上的某个人可能会提出一些建议。在那里加入我们。