【问题标题】:multar middleware not getting triggered多中间件没有被触发
【发布时间】:2021-07-18 16:08:10
【问题描述】:

我正在尝试将图像从反应前端保存到后端,但图像没有保存,我在 multer 代码中添加了控制台日志,我认为中间件没有被触发


router.post('/signup',fileUpload.single('image'),userController.signup)

多重编码


const multer = require('multer')
const { v1: uuidv1, v1 } = require('uuid');

const MIME_TYPE_MAP = {
    'image/png':'png',
    'image/png':'jpeg',
    'image/png':'jpg',
};

const fileUpload = multer({
    limits:50000000,
    storage:multer.diskStorage({
        destination:(req,file,cb)=>{
            console.log(file)
            console.log('file')
            cb(null,'../upload/images')
        }, 
        filename:(req,file,cb)=>{
            console.log('file name')
            const ext = MIME_TYPE_MAP[file.mimetype]
            cb(null,v1()+'.'+ext);
        }
    }),
    fileFilter: (req,file,cb)=>{
        console.log('file filt')
        const isValid = !!MIME_TYPE_MAP[file.mimetype];
        let error  = isValid ? null : new Error('INvalid mime type')
        cb(error,isValid);
    }
});

module.exports =fileUpload;

【问题讨论】:

    标签: javascript node.js express middleware multer


    【解决方案1】:

    你刚刚为 mime 类型设置了错误的对象,所有的 props 都有相同的键。

    const MIME_TYPE_MAP = {
        'image/png': 'png',
        'image/jpeg': 'jpeg',
        'image/jpg': 'jpg',
    };
    

    我也看到了很多关于这个话题的问题。所以只需使用完整路径作为目的地。

    我检查了这段代码,它运行良好,并上传了带有 uuid 名称的图像。

    const path = require('path');
    const { v1: uuidv1, v1 } = require('uuid');
    
    multer({
        storage: multer.diskStorage({
            destination: (req, file, cb) => {
                const filePath = path.join(__dirname, './../upload/images');
                cb(null, filePath);
            },
            filename: (req, file, cb) => {
                const ext = MIME_TYPE_MAP[file.mimetype];
                cb(null, v1() + '.' + ext);
            }
        }),
        limits: {
            fileSize: 50000000 // or 1024 * 1024 * 50 // ~50MB
        },
        fileFilter: (req, file, cb) => {
            const isValid = !!MIME_TYPE_MAP[file.mimetype];
            let error  = isValid ? null : new Error('Invalid mime type!')
            cb(error, isValid);
        },
    });
    

    【讨论】:

    • 它没有保存我尝试了完整的代码,我什至手动将路径更改为完整路径const filePath = 'E:\\GitHub\\EventManagement\\backend\\upload\\images';
    • 我尝试了const filePath = __dirname;,但仍然没有保存
    • 对不起,迟到了.. 但是您是否更改了 MIME_TYPE_MAP ?如果是,那么是否有一些日志?你有什么?请描述更多,你的文件结构是什么?节点版本?
    • 是的,我用你提供的代码更改了该变量,我尝试了不同的文件位置,但没有保存,所以我最终只使用__dirname,但这不起作用,我在日志中什么也没有, 节点版本为15.12.0 multer 为1.4.2
    • 发布pastebin.com/pr8pwyAD的反应代码
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 2019-11-02
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2014-11-29
    相关资源
    最近更新 更多