【问题标题】:JavaScript bencode binary lengthJavaScript bencode 二进制长度
【发布时间】:2012-12-10 08:38:29
【问题描述】:

我正在尝试用 JavaScript 解码一个 torrent 文件,但长度不好。

path = "file.torrent";
$.ajax({
    url: path,
    success: function (data) {
        console.log(data.length);
    }
});

我在PHP中做了同样的事情,长度不同。

$f=file_get_contents($filename, FILE_BINARY);
var_dump(strlen($f));

我认为 ajax 方法不返回二进制文件。

如何在 JavaScript 中获得类似于 file_get_contents($filename, FILE_BINARY) 的内容?

【问题讨论】:

  • JavaScript 不能很好地处理二进制数据。除非您拥有现代浏览器/js 引擎,否则您根本无法处理它。
  • 我冒险猜测一下:如果您还没有,请使用 Content-Typeapplication/octet-stream

标签: javascript file binary


【解决方案1】:

您可以将processData 开关设置为 false:

$.ajax({
    url: path,
    processData: false,
    success: function (data) {
        console.log(data.length);
    }
});

现在 jQuery 不会尝试智能并根据服务器返回的 Content-Type 响应标头自动解析数据,但会将其作为原始数据传递给成功回调。显然,在 javascript 中处理二进制数据并不是这种语言的设计目标。不过,HTML5 有一些不错的补充。

另外值得一提的是,对您从服务器收到的一些二进制数据调用 .length 可能没有多大意义,并且您可能会收到一个 javascript 错误,因为未定义此属性。

【讨论】:

  • 我添加了 processData: false 但长度仍然错误我怎样才能让它正确?因为我需要长度来检查文件完整性是否正常
  • 但是data 实例上是否还有length 属性?您是否尝试将数据记录到控制台?它看起来怎么样?
  • 它看起来像一个字符串,但其中一部分是二进制的,如此处所述wiki.theory.org/BitTorrentSpecification
猜你喜欢
  • 2017-12-06
  • 2016-05-24
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多