android 监测bug上传到服务器,【报Bug】安卓PUT请求发送arraybuffer,服务器收到的数据为空...

详细问题描述

(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)

[内容]

项目需求需要从安卓设备上传图片到服务器或者OSS。这里采取的是用plus.io fileReader读出图片的base64编码并转换成arraybuffer, 再通过put请求传送至服务器。请求成功但是服务器收到的数据为空。

重现步骤

[步骤]

详细见最下三段代码

[结果]

{

'content-type': 'application/binary',

'user-agent': 's631(Android/6.0) (io.dcloud.HBuilder/9.6.32) Weex/0.26.0 1280x800'',

host: 'localhost:8001',

connection: 'Keep-Alive',

'accept-encoding': 'gzip',

'content-length': '0'

}

[期望]

服务器收到完整的数据

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]

HBuilder X

[IDE版本号]

2.3.6.20191020

[windows版本号]

Windows 10 Pro 1903 18362.418

[mac版本号]

uni-app运行环境说明

[运行端是h5或app或某个小程序?]

安卓 app

[运行端版本号]

Android 平板 s631(Android/6.0) (io.dcloud.HBuilder/9.6.32) Weex/0.26.0 1280x800

[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]

HBuilderX

[编译模式是老模板模式还是新的自定义组件模式?]

自定义组件模式

App运行环境说明

[Android版本号]

Android 平板 s631(Android/6.0) (io.dcloud.HBuilder/9.6.32) Weex/0.26.0 1280x800

[iOS版本号]

[手机型号]

自主研发的平板

[模拟器型号]

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]

// 读取设备图片代码

plus.io.resolveLocalFileSystemURL(payload.imageUrl, function(entry) {

entry.file(function(file) {

const fileReader = new plus.io.FileReader();

fileReader.readAsDataURL(file);

fileReader.onloadend = async function(evt) {

try {

const response = await api.inferImage(convertDataURIToBinary(evt.target.result));

}

} catch (e) {

console.error(e);

}

}

})

}, function (e) {

console.error("Resolve file URL failed: " + e.message);

});

// 上段代码中把base64编码转换为arraybuffer的代码

import { Base64 } from "js-base64";

const BASE64_MARKER = ';base64,';

function convertDataURIToBinary(dataURI) {

let base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;

let encoded = dataURI.substring(base64Index);

let raw = Base64.atob(encoded);

let rawLength = raw.length;

let array = new Uint8Array(new ArrayBuffer(rawLength));

for (let i = 0; i < rawLength; i++) {

array[i] = raw.charCodeAt(i);

}

return array.buffer;

}

// 服务器API调用的代码

uni.request({

url: 'http://localhost:8001/test',

data: imageData,

method: "PUT",

header: {

"Content-Type": "application/binary"

},

success: resp=> {

console.log(resp);

if (resp.statusCode === 200)

resolve(resp.data);

else

reject(resp.data);

},

fail: error => {

console.error(error);

reject(error);

}

});

联系方式

[QQ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值