參考資料
Blob
An Introduction To JavaScript Blobs and File Interface
JavaScript ArrayBuffers And Typed Arrays
MIME type
FileReader
一悠抹、Blob簡述
Blob對象是類文件對象,它表示保存文件數(shù)據(jù)的字節(jié)片段。它并不是真的引用了一個真實的文件,但它有自己的size和MIME type橡伞,跟文件一樣钧排。
Blob對象根據(jù)自身size的大小和瀏覽器的不同,會被存儲在內(nèi)存或者文件系統(tǒng)中缆八,我們可以像使用文件一樣來使用一個blob曲掰。
二、創(chuàng)建一個Blob
// 第一個參數(shù)是一個數(shù)組奈辰,數(shù)組中還可以嵌套數(shù)組
// 第二個參數(shù)是一個對象栏妖,該對象中可以指定blob的MIME類型等,可以省略
var myBlob = new Blob(["This is my blob content"], {type : "text/plain"})
要從blob中讀取數(shù)據(jù)奖恰,需要用到 FileReader.
var myBlob = new Blob(["This is my blob content"], {type : "text/plain"})
var myReader = new FileReader()
// 監(jiān)聽“l(fā)oadend”事件吊趾,函數(shù)將在reader讀取完blob中的數(shù)據(jù)之后發(fā)生
myReader.addEventListener("loadend", function(e){
document.getElementById("paragraph").innerHTML = e.srcElement.result
})
// 開始讀取數(shù)據(jù),該方法表示讀取的數(shù)據(jù)存儲為字符串形式
myReader.readAsText(myBlob);
三瑟啃、Blob URLs
如果用瀏覽器打開本地文件论泛,你會發(fā)現(xiàn) url 是以 “file://“ 開頭的, 一個 file:// URL 引用了本地文件系統(tǒng)中的一個真實文件蛹屿。
類似的屁奏,一個 blob:// URL 指向一個Blob對象。
幾乎所有可以使用 urls 的地方都可以使用 blob:// URLs错负。
我們需要用createObjectURL
對象來為一個blob創(chuàng)建一個url坟瓢。
var blob = new Blob(['body { background-color: yellow; }'], {type: 'text/css'})
var link = document.createElement('link')
link.rel = 'stylesheet'
// createObjectURL 返回一個字符串形式的 blob URL
link.href = window.URL.createObjectURL(blob)
document.body.appendChild(link)
因而我們可以利用這個來創(chuàng)建內(nèi)聯(lián)的Web Worker:
// 把這個blob看成一個js文件
// 該blob的內(nèi)容為創(chuàng)建的worker的代碼
var blob = new Blob([ "onmessage = function(e) { postMessage('msg from worker'); }"])
// 創(chuàng)建一個url指向該blob
var blobURL = window.URL.createObjectURL(blob)
var worker = new Worker(blobURL) // 創(chuàng)建一個worker,Worker接受一個url作為參數(shù)
worker.onmessage = function (e) {
console.log(e.data)
}
worker.postMessage('inline worker!')