JavaScript 之 Blob 物件型別
阿新 • • 發佈:2018-11-08
Blob(Binary Large Object)術語最初來自資料庫(oracle 中也有類似的欄位型別。),早期資料庫因為要儲存聲音、圖片、以及可執行程式等二進位制資料物件所以給該類物件取名為Blob。
在Web領域,Blob被定義為包含只讀資料的類檔案物件。Blob中的資料不一定是js原生資料形式。常見的File介面就繼承自Blob,並擴充套件它用於支援使用者系統的本地檔案。
構建一個Blob物件通常有三種方式:
- 通過Blob物件的建構函式來構建。
- 從已有的Blob物件呼叫slice介面切出一個新的Blob物件。
- canvas API toBlob方法,把當前繪製資訊轉為一個Blob物件。下面只看第一種的實現:
用法:新方法建立Blob 物件(建構函式來構建)
var blob = new Blob(array[optional], options[optional]);
建構函式,接受兩個引數
- 第一個引數:為一個資料序列,可以是任意格式的值,例如,任意數量的字串,Blobs 以及 ArrayBuffers。
- 第二個引數:用於指定將要放入
Blob
MIME
)(後端可以通過列舉MimeType,獲取對應型別:MimeType mimeType = MimeType.toEnum(file.getContentType());)。
<script>
var blob = new Blob(["Hello World!"],{type:"text/plain"});
</script>
Blob
物件的基本屬性:
- size :
Blob
物件包含的位元組數。(只讀) - type :
Blob
物件包含的資料型別MIME
,如果型別未知則返回空字串。
Blob
物件的基本方法:
大檔案分割 (slice() 方法),slice
方法與陣列的slice
類似。
Blob.slice([start, [end, [content-type]]])
slice() 方法接受三個引數,起始偏移量,結束偏移量,還有可選的 mime 型別。如果 mime 型別,沒有設定,那麼新的 Blob 物件的 mime 型別和父級一樣。
當要上傳大檔案的時候,此方法非常有用,可以將大檔案分割分段,然後各自上傳,因為分割之後的 Blob 物件和原始的是獨立存在的。
不過目前瀏覽器實現此方法還沒有統一,火狐使用的是 mozSlice() ,Chrome 使用的是 webkitSlice() ,其他瀏覽器則正常的方式 slice()
可以寫一個相容各瀏覽器的方法:
function sliceBlob(blob, start, end, type) {
type = type || blob.type;
if (blob.mozSlice) {
return blob.mozSlice(start, end, type);
} else if (blob.webkitSlice) {
return blob.webkitSlice(start, end type);
} else {
throw new Error("This doesn't work!");
}
}
參考來源於: