代码之家  ›  专栏  ›  技术社区  ›  Dora

使用multer传递memoryStorage以用ajax表示,但req.file未定义

  •  1
  • Dora  · 技术社区  · 7 年前

    我知道这里有很多帖子 req.file

    这是我的html(哈巴狗)

                        input#avatar-file(type='file', name='avatar')
                        button#add-avatar-btn.btn.btn-info Add Avatar
    

    我的阿贾克斯

    s = {
        onClick: () => {
            $('#add-avatar-btn').on('click', function (e) {
                e.preventDefault();
                $('#avatar-file').click();
            });
        },
        onChange: () => {
            $('#avatar-file').on('change', function (e) {
                e.stopPropagation();
                e.preventDefault();
    
                let file = e.target.files;
                if (file.length === 1) {
                    let formData = new FormData();
                    formData.append('avatar', file);
                    console.log(formData, 'formdata');  // this gives me -> FormData {} "formdata"
                    s.runAjax(formData);
                }
            });
        },
        runAjax: dataValue => {
            $.ajax({
                method: 'post',
                url: '/avatar/upload',
                data: dataValue,
                contentType: false,
                processData: false,
                success: data => {
                    console.log(data, 'data success return');
                },
                error: err => {
                    console.log(err, 'err return ');
                }
            });
        },
    };
    
    s.onClick();
    s.onChange();
    

    const multer  = require('multer');
    const storage = multer.memoryStorage();
    const upload = multer({ storage: storage });
    
    router.post('/avatar/upload',  upload.single('avatar'), async (req, res, next) => {
        try {
    
            console.log(req.body.avatar, 'req.body.avatar');  // { avatarUrl: '[object FileList]' } 'req.body'
            console.log(req.files, 'request files');  // undefined
            console.log(req.file, 'single file');  // undefined
            return res.json({status: true});
        } catch (err) {
            return next(err);
        }
    });
    

    我做错了什么?

    但我被困在这里了。

    1 回复  |  直到 7 年前
        1
  •  1
  •   evgeni fotia    7 年前

    它不起作用,因为您发送的是数组而不是文件。

    formData.append('avatar', file[0]);
    

    formData.append('avatar', file);
    
    推荐文章