【问题标题】:Binary Data from server is missing bytes when using Javascript XMLHttpRequest使用 Javascript XMLHttpRequest 时来自服务器的二进制数据缺少字节
【发布时间】: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


【解决方案1】:

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

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

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

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

我非常感谢 Jaromanda X 愿意提供帮助。他的回答为我提供了使用这些设置所需的洞察力。我希望这对以后遇到同样问题的其他人有所帮助!

【讨论】:

  • 没有意义的是它去掉了一个值为 23 的字节!如果缺少 13 个,我可以理解,我会建议某种“行尾”恶作剧……但是 23 个?
  • 我也不明白,但是是的,在整个文件中它正在删除随机值,甚至移动它们。我并没有声称自己理解它,我只知道我更改了 ftp 设置,现在一切正常。所以是的,希望这可以帮助某人:D
猜你喜欢
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多