找出什麼是Blob以及如何使用它
網絡瀏覽器實現了Blob
對象,負責保存數據。
Blob的意思是“二進制大對象”,它是大塊字節的不透明表示。
斑點用於許多事情。
可以從網絡中的內容創建它們。它們可以保存到磁盤,也可以從磁盤讀取。它們是用於File
用於FileReader
以API為例。
可以在之間發送Blob網絡工作者和內嵌框架使用頻道訊息API,並使用推送API。
也可以使用URL引用Blob。
您可以提取存儲在Blob中的文本(或字節),然後Blob甚至可以直接存儲在IndexedDB中,也可以從那裡檢索它們。
看我的IndexedDB教程
Blob是要理解的基本數據類型。
可以創建一個Blob:
- 使用
Blob()
構造函數 - 來自另一個Blob,使用
Blob.slice()
實例方法
構造函數採用值數組。即使您只將一個字符串放入Blob中,也必須將其包裝在一個數組中。
例子:
const data = new Blob(['Test'])
您無需放置細繩價值。您可以通過:
- 一個字符串
- 一個
ArrayBuffer
- 一個
ArrayBufferView
- 其他斑點
Blob構造函數採用一個可選的第二個參數,該參數表示MIME類型:
const data = new Blob(['Test'], { type: 'text/plain' })
擁有Blob對像後,就可以訪問其2個屬性:
size
返回Blob內容的長度(以字節為單位)type
與之關聯的MIME類型
您可以調用其唯一的方法,slice()
。
您打電話的時候slice()
您可以檢索斑點的一部分。
這是一個從字節的10到20創建新Blob的示例aBlob
:
const partialBlob = aBlob.slice(10, 20);
上載Blob
此代碼用作輸入類型或拖放操作的回調。我們使用以下命令將Blob加載到網址中XHR,使用f
跟踪進度的功能:
const uploadBlob = (url, blob, trackProgress) => {
const xhr = new XMLHttpRequest()
xhr.open('POST', url)
xhr.send(blob)
xhr.upload.onprogress = trackProgress
}
從互聯網下載數據
我們可以使用以下語法從互聯網下載數據並將其存儲到Blob對像中:
const downloadBlob = (url, callback) => {
const xhr = new XMLHttpRequest()
xhr.open('GET', url)
xhr.responseType = 'blob'
<span style="color:#a6e22e">xhr</span>.<span style="color:#a6e22e">onload</span> <span style="color:#f92672">=</span> () => {
<span style="color:#a6e22e">callback</span>(<span style="color:#a6e22e">xhr</span>.<span style="color:#a6e22e">response</span>)
}
<span style="color:#a6e22e">xhr</span>.<span style="color:#a6e22e">send</span>(<span style="color:#66d9ef">null</span>)
}
Blob網址
我提到過,也可以使用URL來引用blob。
Blob URL由瀏覽器生成,是內部引用。給定一個Blob,您可以使用URL.createObjectURL()
功能。
Blob網址以blob://
方案。
一旦瀏覽器看到該URL,它將為存儲在內存或磁盤中的相應Blob提供服務。
Blob網址與數據網址不同(開頭為data:
),因為它們不將數據存儲在URL中。它們也不同於文件URL(以file:
),因為它們不會顯示敏感信息(例如文件路徑)。
如果您訪問的Blob URL不再存在,則會從瀏覽器中收到404錯誤。
生成Blob網址後,您可以將其刪除,方法是:URL.revokeObjectURL()
並傳遞網址。
從頁面上的本地磁盤加載文件並獲取
在此示例代碼中,我們有一個input
元素以選擇圖像。選擇圖像後,我們將刪除輸入元素並顯示圖像。完成顯示圖像後,我們還將清除blob:
<input type="file" allow="image/*" />
const input = document.querySelector('input')
input.addEventListener(‘change’, e => {
const img = document.createElement(‘img’)
const imageBlob = URL.createObjectURL(input.files[0])
img.src = imageBlob
<span style="color:#a6e22e">img</span>.<span style="color:#a6e22e">onload</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">function</span>() {
<span style="color:#a6e22e">URL</span>.<span style="color:#a6e22e">revokeObjectURL</span>(<span style="color:#a6e22e">imageBlob</span>)
}
<span style="color:#a6e22e">input</span>.<span style="color:#a6e22e">parentNode</span>.<span style="color:#a6e22e">replaceChild</span>(<span style="color:#a6e22e">img</span>, <span style="color:#a6e22e">input</span>)
})
從斑點讀取
您無法直接訪問Blob中包含的數據。
為此,我們必須使用文件閱讀器目的。
免費下載我的JavaScript初學者手冊
更多瀏覽器教程:
- HTML5提供了一些有用的技巧
- 我如何使基於CMS的網站脫機工作
- 漸進式Web應用程序完整指南
- 提取API
- 推送API指南
- 頻道消息傳遞API
- 服務人員教程
- 緩存API指南
- 通知API指南
- 深入IndexedDB
- Selectors API:querySelector和querySelectorAll
- 通過延遲和異步有效地加載JavaScript
- 文檔對像模型(DOM)
- Web存儲API:本地存儲和會話存儲
- 了解HTTP Cookies的工作原理
- 歷史API
- WebP圖像格式
- XMLHttpRequest(XHR)
- 深入的SVG教程
- 什麼是數據網址
- 學習網絡平台的路線圖
- CORS,跨域資源共享
- 網絡工作者
- requestAnimationFrame()指南
- 什麼是Doctype
- 使用DevTools控制台和控制台API
- 語音合成API
- 如何在純JavaScript中等待DOM ready事件
- 如何將類添加到DOM元素
- 如何遍歷來自querySelectorAll的DOM元素
- 如何從DOM元素中刪除類
- 如何檢查DOM元素是否具有類
- 如何更改DOM節點值
- 如何將click事件添加到從querySelectorAll返回的DOM元素列表中
- WebRTC,實時Web API
- 如何在JavaScript中獲取元素的滾動位置
- 如何替換DOM元素
- 如何只接受輸入文件字段中的圖像
- 為什麼要使用瀏覽器的預覽版?
- 斑點對象
- 文件對象
- FileReader對象
- FileList對象
- ArrayBuffer
- ArrayBufferView
- URL對象
- 類型數組
- DataView對象
- BroadcastChannel API
- Streams API
- FormData對象
- 導航器對象
- 如何使用地理位置API
- 如何使用getUserMedia()
- 如何使用拖放API
- 如何在網頁上滾動
- 在JavaScript中處理表單
- 鍵盤事件
- 鼠標事件
- 觸摸事件
- 如何從DOM元素中刪除所有子級
- 如何使用原始Javascript創建HTML屬性
- 如何檢查是否使用JavaScript選中了複選框?
- 如何使用JavaScript複製到剪貼板
- 如何使用JavaScript禁用按鈕
- 如何在瀏覽器中使頁面可編輯
- 如何使用URLSearchParams在JavaScript中獲取查詢字符串值
- 如何一次刪除頁面上的所有CSS
- 如何使用insertAdjacentHTML
- Safari,退出前警告
- 如何使用JavaScript將圖像添加到DOM
- 如何重設表格
- 如何使用Google字體