LoginSignup
2
2

オブジェクト URL を File または Blob オブジェクトに変換する方法

Last updated at Posted at 2024-03-03

JavaScriptのオブジェクトURLをFileオブジェクトまたはBlobオブジェクトに戻す(変換する)方法を紹介します。 URL.createObjectURL() の逆を行います。

※ これは2020-02-04に個人ブログで公開した記事を移植し、CC0-1.0で提供しています。情報は古い可能性があります。

オブジェクト URL とは

オブジェクトURLは、JavaScriptで次のようにメゾットを呼び出すことで生成されます。

URL.createObjectURL(object);

ファイルを処理したり、ユーザーからファイルを受け取るライブラリなどで、オブジェクトURLで返ってきますが、データを処理したいのでFileオブジェクトやBlobオブジェクトに戻したいケースがあります。

しかし、File APIには URL.createObjectURL(object); の逆が用意されていません。

例えば、 react-dropzone というReactのライブラリではオブジェクトURLで返ってきます。

File オブジェクトに戻す方法

なんの変哲もない対処方法なのですが、URLなので、 fetch() または XMLHttpRequest を使用すればFileオブジェクトに戻すことができます。

fetch() を用いた方法

ES5が動作する環境であれば fetch() を用いた方法がおすすめです。

Can I Useによると、IE、古すぎるEdge、Opera mini以外であれば動作するようです。対象外のブラウザでもpolyfillを導入したり、トランスコンパイルをすれば動作します。

let file = await fetch(url).then((r) => r);
let blob = await fetch(url).then((r) => r.blob());

XMLHttpRequest を用いた方法

古き良き、XMLHttpRequest を用いても取得できます。

Can I Useによると、現在の主要ブラウザはすべて動作するようです。

var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function () {
  var blob = this.response;
};
xhr.send();
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2