SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【Javascript】Data URLとBlobの相互変換、ダウンロード

Data URLをBlobに変換

URLをfetchで取得する。

let dataUrl = "data:image/png;base64,~~~base64エンコードしたバイナリ~~~"
fetch(dataUrl)
.then(response => response.blob())
.then(blob => {
    console.log(blob)
})

BlobをData URLに変換

FileReaderを使う。

let blob = new Blob(['画像のバイナリなど'],{type: 'image/png'})
let reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = function(){
    dataUrl = reader.result
    console.log(dataUrl)
}

Blobをダウンロードさせる

URL.createObjectURL()を使ってURLを作って、a要素に入れて、click()。

function download(blob, fileName) {
  if (window.navigator.msSaveOrOpenBlob) {
    // for IE,Edge
    window.navigator.msSaveOrOpenBlob(blob, fileName);
  } else {
    // for chrome, firefox
    const url = URL.createObjectURL(new Blob([blob], {type: 'text/csv'}));
    const a = document.createElement('a');
    a.href = url;
    a.setAttribute('download', fileName);
    document.body.appendChild(a);
    a.click();
 
    URL.revokeObjectURL(url);
    a.parentNode.removeChild(a);
  }
}

Data URLをダウンロードさせる

a要素のhref属性にそのまま入れてclick()。

let type = 'image/png'
let filename = 'test.png'
let data = 'base64エンコードしたファイルの内容'
const a = document.createElement('a');
a.href = 'data:' + type + ';base64,' + data;
a.setAttribute('download', filename);
document.body.appendChild(a);
a.click();

関連するメモ

コメント