不懂就问, Blob 类型,怎么通过 fileBinary 属性转化成 ArrayBuffer 的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX    Javascript

不懂就问, Blob 类型,怎么通过 fileBinary 属性转化成 ArrayBuffer 的?

  •  
  •   yazoox 2020-09-16 18:14:34 +08:00 2093 次点击
    这是一个创建于 1926 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在修一个 legacy bug,看到一段不太懂的代码。

    调用的是 dropbox 的 api (参考这个链接) https://www.dropbox.com/developers/documentation/http/documentation#files-download

    这里的 dropbox 的文档就有点问题。该 API 的返回值,其实包含一个 property named fileBlob,类型是 Blob (在文档里面没有写出来)

    我们就是通过这个 fileBlob 拿到下载文件的内容。

    我们代码大约是:

    async get(fileId: string): Promise<ArrayBuffer> { “blabla...” const fileData = await [dropbox SDK client API call] return (fileData as any).fileBinary; } 

    成功返回了。内容也都拿到了。但是,这里,我不理解的是, fileData 的类型是 dropbox.files.FileMetadata, 这个里面只有 property - fileBlob,类型是 Blob,没有 fileBinary 啊?这是怎么通过(fileData as any).fileBinary 转化成 ArrayBuffer 的?

    更骚的是, 外面的调用者,直接通过下面这段来判断文件大小,也是成功的。

    const fileData = await get("fileid"); (fileData as Buffer).length 

    google 了一些 ArrayBuffer, Blob, and Buffer 的相关资料,也没发现能够这样转换啊?

    特来请教一下。有没有老司机 /大神解惑一下。

    谢谢!

    4 条回复    2020-09-17 12:34:30 +08:00
    akatquas
        1
    akatquas  
       2020-09-16 18:59:43 +08:00
    yazoox
        2
    yazoox  
    OP
       2020-09-17 08:09:32 +08:00
    @akatquas
    谢谢。清晰了好多。

    dropbox 的 API 文档太坑了,这也不写,那也不写。fileBlob 没有写,fileBinary 也不写,还得去看源代码。
    这一点,以前确实不知道: web & node 环境,这内容的返回类型还不同,blob or buffer,难道统一不好么?
    还是说,因为技术限制 or 某些约定俗成 or best practice?
        3
    akatquas  
       2020-09-17 10:04:11 +08:00
    @yazoox
    浏览器环境里面没有 buffer,它使用了 [blob]( https://developer.mozilla.org/en-US/docs/Web/API/Blob) 来实现 的 二进制数据处理。

    简单的说 blob 就是 浏览器下面的 buffer .
    akatquas
    rioshikelong121
        4
    rioshikelong121  
       2020-09-17 12:34:30 +08:00
    Blob 是对 ArrayBuffer 的高级抽象。ArrayBuffer 是 JS 操作二进制的基本机制。

    具体可见: https://Javascript.info/arraybuffer-binary-arrays
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5404 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 02:47 PVG 10:47 LAX 18:47 JFK 21:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86