nodejs multer 正在获取 req.file 但没有将其上传到目的地
nodejs multer is getting req.file but not uploading it to destination
multer.js
var path = require("path"),
multer = require("multer");
const storage = multer.diskStorage({
destination: function(req, file, next){
next(null, '../public/imgs/');
return;
},
filename: function(req, file, cb){
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
const upload = multer({
storage: storage
});
module.exports = upload;
router.js
//handle createPartner route
router.post("/partner/new", upload.single('image'), function(req, res){
console.log(req.file);
console.log(req.body);
req.body.Partner["image"] ="/static/imgs/"+req.file.filename;
req.body.Partner.body = req.sanitize(req.body.Partner.body);
Partner.create(req.body.Partner, function(err, createdPartner){
if(err){
console.log(err);
res.redirect("/admin/partner/new");
}else{
res.redirect("/partners");
}
});
});
我得到以下 console.log
{ fieldname: 'image',
originalname: 'fb.png',
encoding: '7bit',
mimetype: 'image/png',
destination: '../public/imgs/',
filename: 'image-1521727739861.png',
path: '../public/imgs/image-1521727739861.png',
size: 21532 }
{ Partner: { name: 'test', bio: 'test', image: '', website: 'test' } }
所以 multer 确实获取了文件,但没有将其上传到目的地! /public 和 /public/imgs 的权限是 777。我搜索的所有地方都使用另一种 multer 方法,但那样我必须提前指定 (single/multiple/any) 这是不正确的.
您需要包含我在评论中提到的绝对路径。
您可以使用 path.join
轻松做到这一点,如下所示:
var path = require('path');
var dir = path.join(__dirname, '../public/imgs')
这会将当前文件的绝对路径 __dirname
与您的图像文件连接起来。
multer.js
var path = require("path"),
multer = require("multer");
const storage = multer.diskStorage({
destination: function(req, file, next){
next(null, '../public/imgs/');
return;
},
filename: function(req, file, cb){
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
const upload = multer({
storage: storage
});
module.exports = upload;
router.js
//handle createPartner route
router.post("/partner/new", upload.single('image'), function(req, res){
console.log(req.file);
console.log(req.body);
req.body.Partner["image"] ="/static/imgs/"+req.file.filename;
req.body.Partner.body = req.sanitize(req.body.Partner.body);
Partner.create(req.body.Partner, function(err, createdPartner){
if(err){
console.log(err);
res.redirect("/admin/partner/new");
}else{
res.redirect("/partners");
}
});
});
我得到以下 console.log
{ fieldname: 'image',
originalname: 'fb.png',
encoding: '7bit',
mimetype: 'image/png',
destination: '../public/imgs/',
filename: 'image-1521727739861.png',
path: '../public/imgs/image-1521727739861.png',
size: 21532 }
{ Partner: { name: 'test', bio: 'test', image: '', website: 'test' } }
所以 multer 确实获取了文件,但没有将其上传到目的地! /public 和 /public/imgs 的权限是 777。我搜索的所有地方都使用另一种 multer 方法,但那样我必须提前指定 (single/multiple/any) 这是不正确的.
您需要包含我在评论中提到的绝对路径。
您可以使用 path.join
轻松做到这一点,如下所示:
var path = require('path');
var dir = path.join(__dirname, '../public/imgs')
这会将当前文件的绝对路径 __dirname
与您的图像文件连接起来。