1. 程式人生 > >JavaScript 之 Blob 物件型別

JavaScript 之 Blob 物件型別

    


 

        Blob(Binary Large Object)術語最初來自資料庫(oracle 中也有類似的欄位型別。),早期資料庫因為要儲存聲音、圖片、以及可執行程式等二進位制資料物件所以給該類物件取名為Blob。 
       在Web領域,Blob被定義為包含只讀資料的類檔案物件。Blob中的資料不一定是js原生資料形式。常見的File介面就繼承自Blob,並擴充套件它用於支援使用者系統的本地檔案。

構建一個Blob物件通常有三種方式:

  1. 通過Blob物件的建構函式來構建。
  2. 從已有的Blob物件呼叫slice介面切出一個新的Blob物件。
  3. 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!");
      }
    }

 

參考來源於:

https://blog.csdn.net/gentlycare/article/details/50445014

https://blog.csdn.net/oscar999/article/details/36373183