首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用XHR将base64格式的图像发送到安卓系统中的亚马逊网络服务S3 (原生反应)

无法使用XHR将base64格式的图像发送到安卓系统中的亚马逊网络服务S3 (原生反应)
EN

Stack Overflow用户
提问于 2021-03-23 22:35:24
回答 2查看 78关注 0票数 0

我遇到了一个非常奇怪的问题:我们在我们的应用程序中有扫描文档的功能,结果scan给我提供了带照片的编码base64图像。在ios平台上一切都很好,但是当我尝试在android上发送我的图片时,我得到了xhr.status 0和错误。此外,下一个奇怪的事情是,当我启动调试模式并在react-native-debugger中启用网络检查时,图片发送时没有错误。我在我的设备上安装的release应用程序版本上尝试了它,但仍然收到状态为0的错误

XHR请求

代码语言:javascript
复制
export const uploadXHRImage = (url: string, data: IDataUploadImage) => {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    resolve('Image successfully uploaded to S3');
                } else {
                    reject(localize('failedUploadImage'));
                }
            }
        };
        xhr.ontimeout = () => reject(localize('timeoutUploadImage'));
        xhr.timeout = UPLOAD_IMAGE_TIMEOUT;
        xhr.open('PUT', url);
        xhr.setRequestHeader('Content-Type', data.type);
        xhr.send(data);
    });
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-30 18:51:21

我找到了答案: Android不能处理xhr发送的图片,而图片不会以文件的形式保存在缓存或其他目录中。此外,安卓在数据之前需要file://。示例如下:

代码语言:javascript
复制
saveImage = (image: string) => {
        if (IS_IOS) {
            return `data:image/jpg;base64,${image}`;
        }

        const tempFileDirectory = `${fs.CachesDirectoryPath}`;
        const tempFilePath = `${tempFileDirectory}/${uuidv4()}.jpg`;
        fs.writeFile(tempFilePath, image, 'base64');
        return `file://${tempFilePath}`;
    };
票数 0
EN

Stack Overflow用户

发布于 2021-03-23 23:14:58

添加到标题:

代码语言:javascript
复制
"Content-Type": 'application/json',   
"Connection": "close",  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66765306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档