什么是BLOB URL,為什么要使用它?

在百家號(hào)上,發(fā)現(xiàn)視頻src如下所示:

src="blob:https://...

是可以播放和打開(kāi),很神奇,我就去查了一下這塊。

那么問(wèn)題來(lái)了
  • 什么是blob網(wǎng)址?
  • 為什么使用它?
  • 我可以在服務(wù)器上創(chuàng)建自己的Blob URL嗎?
  • 如果你有任何額外的細(xì)節(jié)

Blob URL(參考W3C,官方名稱(chēng))或Object-URL(參考MDN和方法名稱(chēng))與BlobFile對(duì)象一起使用。

src =“blob:https://crap.crap ”我打開(kāi)了視頻src中的blob url,它給出了一個(gè)錯(cuò)誤,我無(wú)法打開(kāi),但與src標(biāo)簽一起工作,它有多可能?

Blob URL只能由瀏覽器在內(nèi)部生成。URL.createObjectURL()將創(chuàng)建一個(gè)特殊的Blob或File對(duì)象的引用,以后可以使用它來(lái)發(fā)布URL.revokeObjectURL()。這些URL只能在瀏覽器的單個(gè)實(shí)例中和同一個(gè)會(huì)話(huà)中(即頁(yè)面/文檔的生命周期)在本地使用。

什么是Blob網(wǎng)址? 為什么使用它?

Blob URL / Object URL是一種偽協(xié)議,允許Blob和File對(duì)象用作圖像,下載二進(jìn)制數(shù)據(jù)鏈接等的URL源。

例如,不能處理Image對(duì)象的原始字節(jié)數(shù)據(jù),因?yàn)樗恢廊绾翁幚硭?。它需要例如圖像(二進(jìn)制數(shù)據(jù))通過(guò)URL加載。這適用于任何需要URL作為源的東西。不用上傳二進(jìn)制數(shù)據(jù),而是通過(guò)URL提供回來(lái),最好使用額外的本地步驟來(lái)直接訪問(wèn)數(shù)據(jù)而無(wú)需通過(guò)服務(wù)器。

對(duì)于編碼為Base-64的字符串的Data-URI也是更好的選擇。Data-URI的問(wèn)題是每個(gè)char在JavaScript中占用兩個(gè)字節(jié)。最重要的是,由于Base-64編碼增加了33%。Blob是純粹的二進(jìn)制字節(jié)數(shù)組,它不像Data-URI那樣具有任何重要的開(kāi)銷(xiāo),這使得它們處理速度越來(lái)越快。

我可以在服務(wù)器上創(chuàng)建自己的Blob網(wǎng)址嗎?

否,Blob網(wǎng)址/對(duì)象網(wǎng)址只能在瀏覽器內(nèi)部制作??梢酝ㄟ^(guò)文件讀取器API創(chuàng)建Blob并獲取File對(duì)象,盡管BLOB只是意味著B(niǎo)inary Large對(duì)象并以字節(jié)數(shù)組的形式存儲(chǔ)??蛻?hù)端可以請(qǐng)求數(shù)據(jù)以ArrayBuffer或Blob的形式發(fā)送。服務(wù)器應(yīng)該將數(shù)據(jù)作為純二進(jìn)制數(shù)據(jù)發(fā)送。數(shù)據(jù)庫(kù)通常也使用Blob來(lái)描述二進(jìn)制對(duì)象,實(shí)際上我們基本上是在談?wù)撟止?jié)數(shù)組。

如果你有其他細(xì)節(jié)

需要將二進(jìn)制數(shù)據(jù)封裝為BLOB對(duì)象,然后使用它URL.createObjectURL()為其生成本地URL:

var blob = new Blob([arrayBufferWithPNG], {type: "image/png"}),
    url = URL.createObjectURL(blob),
    img = new Image();

img.onload = function() {
    URL.revokeObjectURL(this.src);     // clean-up memory
    document.body.appendChild(this);   // add image to DOM
}

img.src = url;                         // can now "stream" the bytes

請(qǐng)注意,URL可能會(huì)在webkit瀏覽器中添加前綴,因此請(qǐng)使用:

var url = (URL || webkitURL).createObjectURL(...);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,329評(píng)論 2 89
  • 一次備課中,感覺(jué)挺有意思的一節(jié),希望我的同學(xué)們喜歡。
    孟憲_9549閱讀 278評(píng)論 0 0
  • 昨天晚上又失眠了一夜……幾乎沒(méi)有睡著,醒來(lái)了很累,但是強(qiáng)忍著,白天都沒(méi)有睡,就怕晚上繼續(xù)失眠 今天下午四點(diǎn)出門(mén),去...
    咕嚕嚕呼嚕嚕閱讀 191評(píng)論 0 0

友情鏈接更多精彩內(nèi)容