使用Javascript XMLHttpRequest时,来自服务器的二进制数据丢失了字节

时间:2016-09-01 23:19:24

标签: javascript arrays binary typed-arrays

我一直在努力工作几天但没有用:(任何帮助都会非常感激。

我正在尝试使用以下方法将文件下载为类型化数组:

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,使用不同的设备进行测试(即将其加载到手机和计算机上),但到目前为止没有任何帮助。

令我感到奇怪的是,每次相同的数字都是错误的。所以我不认为他们会在网络上“迷失”。此外,当我用不同的服务器测试它时,我会得到不同的数字。因此,似乎每个服务器都会丢弃一组不同的数字。

有谁知道为什么会这样,你是否可以引导我朝着帮助解决问题的方向前进?非常感谢你!

1 个答案:

答案 0 :(得分:1)

我明白了......哇这是一次有趣的经历。

事实证明我正在使用的FTP客户端(FileZilla)有一个设置,可以自动尝试检测文件数据类型并对其进行必要的调整,以便在所有OS系统中正确显示。

这是一个记录在案的行为,可以在这里阅读: https://wiki.filezilla-project.org/Data_Type

当我关闭此行为时(在#34;转移" - "转移类型"标签)下将其从自动切换为二进制,一切都按预期再次运行。

我非常感谢Jaromanda X愿意提供帮助。他的回答给了我解决这些设置所需要的洞察力。我希望这将有助于将来遇到同样问题的其他人!