【问题标题】:multer, react-native image upload not workingmulter,react-native 图片上传不起作用
【发布时间】:2021-10-17 20:21:23
【问题描述】:

我正在尝试使用图像选择器上传图片。我制作了一个图像组件并让一个图像选择器填充该组件,但是将图像数据上传到服务器不起作用。

这是由附加到按钮的 onPress 调用的代码:

const handlePhoto = async () =>{
        if(image!== null){
            console.log(image)
            const fileToUpload = image;
            const data = new FormData();
            data.append('name', 'Image Upload');
            data.append('file', fileToUpload);
            let res = await fetch(
                'http://localhost:3000/user/pic_upload',
                {
                method: 'post',
                body: data,
                headers: {
                    'Content-Type': 'multipart/form-data; ',
                },
            }
            );  
            let responseJson = await res.json();
            console.log(responseJson,'result')
            if (responseJson.status == 1) {
                alert('Upload Successful');
            }
        } else {
            alert('Please Select File first');
        }
    }

在用户路由器的索引文件中:

const upload=multer({
    storage:multer.diskStorage({
        destination:function(req,file,callback){
            callback(null,'uploads/')
        },
        filename:function(req,file,callback){
            callback(null,new Date().valueOf()+path.extname(file.originalname))
        }
    }),
});

router.post('/pic_upload', upload.single('file'), controller.picUpload)

而 picUpload 路由器只有 console.log

我应该修复什么才能让它工作?

【问题讨论】:

  • 如果您的文件夹位于 /public/assets/uploads,请将 uploads/ 更改为 path.join(path.dirname(require.main.filename || process.mainModule.filename), 'public', 'assets', 'uploads')
  • 控制台 req.file 在您的控制器中并在此处发送结果
  • 之前是未定义的,现在仍然显示未定义
  • 在前端检查你的图片,文件类型是否像developer.mozilla.org/en-US/docs/Web/API/File
  • 我不知道你的意思..虽然图片的扩展名是jpg

标签: node.js reactjs react-native multer


【解决方案1】:

根据评论讨论,您的 handlePhoto 是错误的,对于 multer 工作,您需要 File 类型的对象。

文件类型:https://developer.mozilla.org/en-US/docs/Web/API/File

文件类型图片:https://i.stack.imgur.com/B0Z96.png

【讨论】:

  • 首先你的控制台日志看起来像来自谷歌浏览器和文件类型也说输入元素,但我的代码是本机反应,所以没有这个应用程序的网页。我正在做前端和后端。
  • 呃没关系,我设法用另一个代码示例尝试了它,现在它可以工作了!无论如何,谢谢你的帮助!
  • 在 react native 中,您将获得 temp uri 以及您需要在后端发送的 temp uri
  • 很高兴听到,我很乐意帮助你
猜你喜欢
  • 2018-12-16
  • 2022-09-29
  • 1970-01-01
  • 2018-09-17
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2017-06-29
相关资源
最近更新 更多