【问题标题】:How to make multer save images to disk?如何让 multer 将图像保存到磁盘?
【发布时间】:2020-10-28 23:05:59
【问题描述】:

所以我一直在尝试让 multer 将图像数据保存在磁盘上,并将图像 mimetypes、名称和路径保存到 Mongo 磁盘上的文件夹。我现在的样子是这样的:

Multer 设置:

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 将选定的图像保存在磁盘上?

【问题讨论】:

    标签: reactjs mongodb express multer


    【解决方案1】:

    为像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);
    

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 2018-12-03
      • 1970-01-01
      • 2021-10-13
      • 2018-10-09
      • 2011-10-19
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多