V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
dou4cc
V2EX  ›  JavaScript

今天突然有了用 xhr 处理二进制的需求

  •  
  •   dou4cc · 2017-03-11 15:51:29 +08:00 · 2199 次点击
    这是一个创建于 2849 天前的主题,其中的信息可能已经有所发展或是发生改变。
    老方法是改 charset ( http://web.archive.org/web/20080821092906/http://mgran.blogspot.com/2006/08/downloading-binary-streams-with.html ),新方法是改 responseType ,新方法性能好,语义清晰,然而我还是使用老方法,因为老方法在正文接收完全前可以读取正文,做到流式加载,而新方法不行~
    第 1 条附言  ·  2017-03-11 22:45:06 +08:00
    刚刚找到了 ReadStream API ,这个问题解决了
    4 条回复    2017-03-14 10:38:21 +08:00
    dou4cc
        1
    dou4cc  
    OP
       2017-03-11 16:18:47 +08:00
    那么问题来了,怎么覆盖 BOM ?
    zbinlin
        2
    zbinlin  
       2017-03-12 20:35:39 +08:00
    xhr 里有这个 API ?还是指的是 fetch API 里的 ReadableStream ?
    dou4cc
        3
    dou4cc  
    OP
       2017-03-13 10:21:23 +08:00
    @zbinlin 指的是 fetch ,不过好像哪里不对
    dou4cc
        4
    dou4cc  
    OP
       2017-03-14 10:38:21 +08:00
    @zbinlin fetch 不能及时 abort , stream 的粒度也难以控制,连 nightly 都不支持。我现在想到的迂回办法是仍然使用 xhr ,如果检测到 charset 不再是 x-user-defined ,就 abort 当前连接,使用 Range 标头错开一字节重新发起请求,再在单独的连接中使用 responseType 为 arraybuffer 的请求补上错开的那个字节
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.