【发布时间】:2017-01-09 23:14:44
【问题描述】:
我已经为此工作了几天,但无济于事:(任何帮助将不胜感激。
我正在尝试使用以下方法将文件下载为类型化数组:
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true); //This is the path to my file
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response;
var array = new Uint8Array(arrayBuffer ); //This is the array I retrieve from my file
};
oReq.send(null);
当我对计算机硬盘上的所有资产执行此操作时,它可以完美运行,我会收到如下所示的回复(这只是示例数据):
array[0] = 10;
array[1] = 15;
array[2] = 20;
array[3] = 17;
array[4] = 18;
array[5] = 23;
array[6] = 25;
array[7] = 12;
array[8] = 2;
array[9] = 10;
...
但是,当我将所有内容上传到服务器时,我得到的结果如下所示:
array[0] = 10;
array[1] = 15;
array[2] = 20;
array[3] = 17;
array[4] = 18;
array[5] = 25; //This number is missing from above, it should be 23
array[6] = 12;
array[7] = 2;
array[8] = 10;
array[9] = 18;
...
我已经尝试了我能想到的一切来解决这个问题。清除缓存,打开和关闭 gzip,用不同的设备测试它(即在手机和计算机上加载它),但到目前为止没有任何帮助。
让我感到奇怪的是,相同的数字每次都始终是错误的。所以我认为他们不会在网络上“迷路”。此外,当我使用不同的服务器对其进行测试时,我会得到不同的数字。因此,似乎每个服务器都丢弃了一组不同的数字。
有谁知道这是为什么,您能引导我找到帮助解决问题的方向吗?非常感谢!
【问题讨论】:
-
您真的在处理 .png 文件吗?
-
技术上不,我正在处理一个包含二进制数据的 blob 文件。但是,我可以将 blob 文件的扩展名重命名为我想要的任何内容,并且它仍然可以在本地工作。这会有所作为吗?
-
不,我只是想知道 - 不知道我要问这个问题......你试过 fetch 吗? ...
fetch('/myfile.png').then(res=>res.arrayBuffer()).then(ab=>new Uint8Array(ab)).then(u => console.log(u))...这也“错过”字节吗? -
另外,请检查开发者工具网络选项卡 -
Content-Length标头是否也在变化? -
关于您的第一个问题,我很抱歉我以前从未见过“获取”API,我无法从您提供的代码中得到它。但是我确实检查了“内容长度”,它确实会根据文件类型而改变。这很有趣。例如,当文件是 .png 时,它是 1,714,496 字节,当它只是一个 blob 文件(无扩展名)时,它是 1,713,636 字节。
标签: javascript arrays binary typed-arrays