1 回答
TA贡献1796条经验 获得超10个赞
我会这样做。我会创建一个名为 的文件夹,例如 。它包含开头的1个文件,称为multerMiddlewaresarticlePictureUpload.js
它看起来像这样:
module.exports = function(req, res) {
const multer = require("multer");
const fs = require("fs");
let user;
const storage = multer.diskStorage({
destination: (req, file, cb) => {
user = "5da4ksfgd4ds"; //this should be unique, this could be the _id that is stored in the mongo database
const dir = `./static/uploads/${user}/article`;
if (!fs.existsSync(dir)) { //checks if directory exist, if not it will create one
fs.mkdirSync(dir, { recursive: true });
}
return cb(null, dir);
},
filename: (req, file, cb) => {
let name = Date.now();
cb(null, `${name}.jpeg`); //
}
});
const upload = multer({ storage });
return upload;
}
现在我们已经完成了multer中间件,现在你可以使用它了:
首先导入它:
const articleUploadMiddleware = require("path/to/multer/middleware");
router.post('/', articleUploadMiddleware().single("image") ,(req, res, next) => {
//some code....
let filePath = req.file.path; //save this path into your database
//more code
}
在您的客户端上,我猜您使用的是axios,重要的是将标头设置为并像这样发送您的请求:multipart/form-data
例如,您需要一个事件侦听器来监视触发函数的文件输入的更改<input typ="file" />uploadImg
uploadImg(e){
const articleImg = e.target.files[0];
let formData = new FormData();
formData.append("image", articleImg);
axios({
method: "POST",
url: "yourUrl",
data: formData,
headers: {
"Content-Type": "multipart/form-data"
}
})
}
此时,如果一切成功,您的img应存储在 目录中 。大数字是时间戳。您可以根据需要对其进行命名。./static/uploads/5da4ksfgd4ds/article/12412334234.jpg
并且此img的路径应存储在数据库中
添加回答
举报