🔫

【JavaScript】指定したURLとファイル名でクライアント側でダウンロード処理

2022/02/04に公開

概要

フロントエンド側で何かしらファイルのダウンロードを行わせたい場合は、普通にaタグを設置するケースが大半と思います。ただ、中にはアップロードされたファイル名を、そのまま見せたくないというケースもあるかなと感じあます。
今回は、クライアント側でファイルのURLとファイル名を指定して、ダウンロード処理をさせる実装を紹介します。

対応

Download files in front end — Vueの記事が参考になります。一度blobでURLからファイルした後に、擬似的にaタグを設定してクリック処理を行う流れです。なお、記事はVueとなっていますが、JavaScriptの機能で実現できます。

実装サンプル

ほぼ上記の記事そのままですが、ダウンロード処理を行う関数の実装サンプルを、のせておきます。

async function fileDownloadFromUrl(fileName, fileUrl) {
  const response = await fetch(fileUrl);
  const blob = await response.blob();
  const newBlob = new Blob([blob]);
  const objUrl = window.URL.createObjectURL(newBlob);
  const link = document.createElement("a");
  link.href = objUrl;
  link.download = fileName;
  link.click();
  // For Firefox it is necessary to delay revoking the ObjectURL.
  setTimeout(() => {
    window.URL.revokeObjectURL(objUrl);
  }, 250);
}

Discussion