javascript - 使用 Javascript XMLHttpRequest 时,来自服务器的二进制数据缺少字节

标签 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);

当我对所有 Assets 都在我的计算机硬盘驱动器上执行此操作时,它运行完美,我会收到如下所示的响应(这只是示例数据):

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,用不同的设备测试它(即在手机和电脑上加载它),但到目前为止没有任何帮助。

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

有谁知道这是为什么,您能否引导我找到帮助解决问题的方向?非常感谢!

最佳答案

我想通了...哇,这是一次有趣的经历。

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

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

当我关闭此行为(在“传输”-“传输类型”选项卡下将其从自动切换为二进制)时,一切都按预期再次运行。

非常感谢 Jaromanda X 的乐于助人。他的回答让我了解了如何使用这些设置。我希望这能帮助将来遇到同样问题的其他人!

关于javascript - 使用 Javascript XMLHttpRequest 时,来自服务器的二进制数据缺少字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282211/

相关文章:

javascript - jQuery 文件上传插件 - 开始/取消按钮和进度条不起作用

javascript - 如何将 javascript 示例与外部 js 一起使用?滚动后突出显示 div

javascript - 无法读取未定义 AngularJs 错误的属性 '$scope'

javascript - 带有远程内容的 jQuery UI 选项卡,链接到选定选项卡的当前页面

c# - 微软是否从 C# 中的数组中删除了 "Dynamic"和 "Static"措辞?

c++ - 静态常量数组在 MSVC 中动态初始化?

javascript - 如何将变量的值传递给 firebase 调用?

c - 如何将char值转换为二进制并分别显示每一位?

xcode - iTunes 连接中的错误二进制文件无效?

c++ - 将 C++ std::vector<std::string> 转换为 std::vector<unsigned char> (反之亦然)