March 6, 2025

Blob & File


Blob & File

clipboard.png

Blob (binary large object)

本質是一個二進制編碼格式數據, 不可修改, 讀取唯一方法是透過 FileReader

🤔 new Blob(array, options)

let blob = new Blob(['helloworld'], {type: "text/plain"})

// > Blob {size: 10, type: 'text/plain'}

🤔 slice()

let blobSlice = blob.slice(0, 2, "text/plain")

let reader = new FileReader()
reader.readAsText(blobSlice)

// > FileReader {readyState: 2, result: 'he'..........}

File

🤔 File 是特殊類型的 Blob (繼承了 Blob), 也有更多 Blob 沒有的屬性 clipboard.png


FileReader

const reader = new FileReader()
// reader.readAs****
 const fileInput = document.querySelector('input[type="file"]');
 
 fileInput.addEventListener('change', function(event) {
 const file = event.target.files[0];
 
 if (file) {
   const reader = new FileReader();

   // 當檔案讀取完成後
   reader.onload = function(e) {
     const dataUrl = e.target.result;
     
     // 將讀取的圖片顯示在 <img> 元素中
     const imgElement = document.querySelector('#image-preview');
     imgElement.src = dataUrl;
   };

   // 開始讀取檔案
   reader.readAsDataURL(file);
 }
});
reader.readAsText(blob)
reader.result
// 'helloworld'

Object URL

Object URL 是一種代表本地文件或數據的 URL,它可以讓你在網頁中使用這些本地資源。這些 URL 通常是由瀏覽器生成的,用來引用本地檔案,而不需要先將文件上傳到伺服器。

clipboard.png

// 假設你有一個 <input> 來選擇文件
const fileInput = document.querySelector('input[type="file"]');

fileInput.addEventListener('change', function(event) {
  const file = event.target.files[0];
  
  if (file) {
    // 創建 Object URL
    const objectURL = URL.createObjectURL(file);

    // 顯示圖片
    const imgElement = document.querySelector('#image-preview');
    imgElement.src = objectURL;
  }
});

readAsDataURL 的區別:

Other

let canvasToDataUrl = canvas.toDataURL()

ArrayBuffer 主要可以修改內容或是對二進制文件進行操作.

所以可以透過建立 Buffer 然後透過 blob + FileReader 將二進制數據讀取. clipboard.png