wx.request res.data里的数据和实际数据不同
发布于 6 年前 作者 hyuan 14339 次浏览 来自 问答

使用wx.request 获取服务器上的一个.bin文件。

但是request直接将.bin文件转换为了string  并且string长度和源文件大小不同 请问是什么问题?需要进行别的设置吗?

请求头设置:

  1. Content-Type:

    application/octet-stream

7 回复

@maq

感谢你的建议。

如果我可以通过request方式获取一个.bin文件的buffer或者内容 哪我可以通过ble接口进行升级 。

通过console 看到request接口其实已经将整个.bin文件接收但是不知道微信做了什么处理将内容转换为了string  导致内容长度与原文见内容长度不一致

遇到同样的问题,请求数据为二进制码时,ios真机直接无法收到任何数据,errMsg:requeat:fail response data convert to UTF8 fail,安卓和工具上则显示string长度与原始数据有差异,咨询官方是否可以修复这个bug,急!

服务器端返回的Content-Type:"application/octet-stream"是正确的,微信错误的把结果中的data强制转成了string

你的服务器输出了错误格式的内容,让官方修复什么 BUG?

如果不转换成 string,你觉得它应该是个什么东西呢?ByteBuf?

wx.request() 只会把收到的内容理解为“字符串”(也许还会进一步当做 json 来解析),而且它会假设你发送的内容是 UTF-8 编码的,而事实上你的 .bin 文件不会符合这个预期,所以“转换为字符串”的过程中会出现乱码,长度当然也就变了。

你可以在服务器端先用 base64 编码,到了小程序里再解码。

首先,js 并不是 binary-friendly 的,在 js 中处理二进制数据一向是比较困难的,需要特殊支持。

很好奇你为什么要把一个 .bin 文件传到 js 里,接下来要做什么……

必要的话,可以考虑在服务器端对二进制内容进行 base64 编码,然后在小程序端用 wx.base64ToArrayBuffer() 解码。

回到顶部