【问题标题】:Is it possible to retrieve parts of a large binary file via Javascripts xhr based on offset and length?是否可以通过基于偏移量和长度的 Javascript xhr 检索大型二进制文件的一部分?
【发布时间】:2014-05-26 18:46:20
【问题描述】:

我正在编写一个用于访问二进制数据的处理程序。目前我正在这样做:

...
d = new FileReader();
d.onload = function (e) {
    var response_buffer, data, byte_len, temp_float;

    response_buffer = e.target.result;
    data = new DataView(response_buffer);
    byte_len = data.byteLength;

    // create empty placeholder for binary data received
    tmp_data = new Float32Array(byte_len / Float32Array.BYTES_PER_ELEMENT);
    len = tmp_data.length;

    // Pre-parse
    for (i = 0; i < len; i += 1) {
      tmp_data[i] = data.getFloat32(i * Float32Array.BYTES_PER_ELEMENT, true);
    }

    ...

这可以正常工作并将我获取的数据(文件/http)“预处理”到我的 tmp_data 数组中。

但是,我还需要能够处理大文件(例如 1GB+)。我的想法是尝试只获取文件的一部分,因为从二进制结构中我可以确切地知道我必须获取哪些偏移量。

问题
如果我知道偏移量和长度而不是必须获取整个文件,是否可以 XHR 从大文件中获取“范围”字节?

谢谢!

【问题讨论】:

    标签: javascript xmlhttprequest offset binary-data arraybuffer


    【解决方案1】:

    如果您的服务器尊重它,您可以设置 Range: 请求标头,这正是这样做的。

    【讨论】:

    • 好主意。如果我无法控制服务器怎么办?
    • 它可能已经尊重这一点(它是标准标题)。如果服务器没有任何方法可以发送您要查找的数据,那么您就不走运了。
    • 好的。让我们轮询一些服务器。如果不支持,我至少应该得到一个 501,让我们看看。谢谢!
    • @frequent:不;它更有可能忽略标题。相反,请检查 Accept-Ranges 响应标头。
    【解决方案2】:

    您还可以实现自己的轮询策略,以 x 字节为单位请求数据并传递偏移量。类似于网页上无限滚动的工作原理。

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 2022-07-19
      相关资源
      最近更新 更多