因此,我一直试图使multer将图像数据保存在磁盘上,以及图像的模仿类型,名称和指向Mongo磁盘上文件夹的路径。我现在所看到的像这样:
恶意设置:
const storage = multer.diskStorage({
destination: (req, file, cb) => cb(null, '/public/images/uploads'),
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname)
},
});
const upload = multer({
storage,
fileFilter (req, file, cb) {
if (!file.originalname.match(/\.(jpeg\jpg\png)$/)) {
cb(new Error('Only upload jpg and png files.'));
}
cb(undefined, true);
}
});
上传图片的路径:
router.post('/upload/:userid', upload.single('photo'), uploadPhoto);
然后从控制器中将此位保存在Mongo上的图像详细信息:
const newPhoto = new Photo({
photo: {
mimetype,
photoUrl: `images/uploads/${name}`,
name,
},
});
axios调用“上载”端点:
await axios.post(
`${baseUrl}/api/photo/upload/${JSON.parse(localStorage.getItem('loggedUser'))._id}`,
formData,
{ headers: {
'Content-Type': 'multipart/form-data'
}},
).then(response => setPhotoUrls([response.data.photoUrl, ...photoUrls]));
因此后端部分可以正常工作,因为它可以将所需的数据保存在Mongo上,但是图像仍不会保存在磁盘上。如何使multer将所选图像保存在磁盘上?
答案 0 :(得分:0)
为类似multerHelper.js
的multer创建单独的文件夹
const multer = require('multer');
let fs = require('fs-extra');
let storage = multer.diskStorage({
destination: function (req, file, cb) {
fs.mkdirsSync(__dirname + '/uploads/images'); // fs.mkdirsSync will create folders if it does not exist
cb(null, __dirname + '/uploads/images');
},
filename: function (req, file, cb) {
console.log(file);
cb(null, Date.now() + '-' + file.originalname);
}
})
let upload = multer({ storage: storage });
let createUserImage = upload.single('photo');
let multerHelper = {
createUserImage,
}
module.exports = multerHelper;
在您的路线中导入multerhelper文件
const multerHelper = require("../helpers/multer_helper");
router.post('/upload/:userid',multerHelper, uploadPhoto);