javascript - 从react-native获取文件上传图像,与 `<input type="file"onChange={this.fileChangedHandler}> `

标签 javascript node.js reactjs react-native react-native-fs

我尝试过这样做

var photo = {
    uri: uriFromCameraRoll,
    type: 'image/jpeg',
    name: 'photo.jpg',
};

并使用

axios

var body = new FormData();
body.append('authToken', 'secret');
body.append('photo', photo);
body.append('title', 'A beautiful photo!');

const config = {
            headers: {
                'content-Type': 'multipart/form-data'
            }
        }
 MY_API().then(instance => {

// it is axios instance
            instance.post("/api/v1/upload",
                { body }
                , config).then(res => {
                    console.log(JSON.stringify(res));

                }).catch(err => {
                    console.log(err);
                })
        }
        )

删除配置后我得到

Error 503

并通过配置给出

Error: Multipart: Boundary not found

并且与 POSTMAN 一起工作也很好...以及标题

我也尝试上传文件(blob),但出现同样的错误

Error: Multipart: Boundary not found

 dataURLtoFile(dataurl, filename) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, {type:mime});
}

//Usage example:
var file = dataURLtoFile('data:text/plain;base64,aGVsbG8gd29ybGQ=', 'hello.txt');
console.log(file);

API 在 ReactJS 中与代码配合得很好 enter image description here

编辑:我已经使用 React-native-fetch-blob 解决了问题,但希望使用 axios 来解决,

这是代码:

 RNFetchBlob.fetch('POST', 'https://helloapp.herokuapp.com/api/v1/upload', {
            'authorization': jwtToken,
            'Content-Type': 'multipart/form-data',
        },
            [
                { name: 'image', filename: 'avatar-png.png', type: 'image/png', data: base64logo },
                { name: 'name', data: name }
            ]
        ).then((resp) => {
            console.log(resp);
        }).catch((err) => {
            console.log(err);
        });

最佳答案

我已经通过使用React-native-fetch-blob解决了这个问题,但希望使用 axios 来解决,

这是代码:

 RNFetchBlob.fetch('POST', 'https://helloapp.herokuapp.com/api/v1/upload', {
            'authorization': jwtToken,
            'Content-Type': 'multipart/form-data',
        },
            [
                { name: 'image', filename: 'avatar-png.png', type: 'image/png', data: base64logo },
                { name: 'name', data: name }
            ]
        ).then((resp) => {
            console.log(resp);
        }).catch((err) => {
            console.log(err);
        });

关于javascript - 从react-native获取文件上传图像,与 `<input type="file"onChange={this.fileChangedHandler}> `,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925499/

相关文章:

javascript - useEffect 抛出依赖警告

node.js - Express - 如何修改请求然后重定向到另一条路线?

javascript - 无法读取未定义的属性 'modalIsOpen'

javascript - 如何将文件图像转换为 Byte[] ReactJS?

javascript - 删除对象属性在删除操作之前生效

javascript - 如何从 javascript 客户端验证 azure blob 存储 md5 哈希值?

javascript - 多个帐户同一 session 登录

javascript - 成功google auth后将用户重定向到Angular路由

javascript - angular 2 相当于 react renderToString

javascript - setState 在单独文件中的非 React 组件中