こんにちわ、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
あなたは、ファイルダウンロード機能を作ったことがありますか?Word、Excel、PowerPoint、PDFなどダウンロードが必要になるケースは多岐にわたりますよね。
そこで今回は、download属性を使ったダウンロード方法という基本的な内容から、
- FileApiのBlobを活用したダウンロード方法
- ボタンクリックでダウンロードする方法
など応用的な内容も含め、ファイルダウンロード機能の作り方について徹底的に解説します!
download属性でダウンロードする方法とは
まずはじめに、一番簡単なHTML5でダウンロードする方法について説明します。
HTMLで次のようなコードを書くと、ファイルをダウンロードするリンクを作ることができます。
<a href="img/test.png" download="test.png">ダウンロード</a>
ファイルをダウンロードするリンクにdownload属性を追加してダウンロードできるようにしています。「img/test.png」がファイルパスで、「test.png」ダウンロード時のファイル名です。
ファイルをダウンロードするだけであれば、この方法で簡単にダウンロードできるので覚えておくと便利ですよ。
Blobを使ってテキストで入力したデータをダウンロードする方法とは
次に、テキストで入力したデータをダウンロードする方法について説明します。FileApiの「Blob」を使えば、テキストで入力した文字をテキストファイルとしてダウンロードすることができます。
こちらもよく使う方法なので、HTML5のdownload属性とあわせて覚えておくのがおすすめです。
<input type="text" id="txtData" /> <br /> <script type='text/javascript'> function handleDownload() { //テキストボックスの値を取得 var txtData = document.getElementById("txtData").value; //ファイルタイプ、保存するテキストを指定してblobを作成 var blob = new Blob([ txtData ], { "type" : "text/plain" }); //ファイルをダウンロード if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(blob, "test.txt"); // msSaveOrOpenBlobの場合はファイルを保存せずに開ける window.navigator.msSaveOrOpenBlob(blob, "test.txt"); } else { document.getElementById("download").href = window.URL.createObjectURL(blob); } } </script> <a id="download" href="#" download="test.txt" onclick="handleDownload()">ダウンロード</a>
blobでテキストタイプ、テキストボックスで入力した値(txtData)を使ってデータを作成し、ファイルを保存しています。
サンプル紹介
最後に、すぐに使えるサンプルコードを用意しました。
※download属性を利用したaタグの「img/test.png」「test.png」の部分のみ利用環境に合わせて変更いただければ、そのままご利用できます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>ダウンロードテスト</title> <script type="text/javascript" src="test.js"></script> </head> <body> <a href="img/test.png" download="test.png">HTML5のdownloadでダウンロード</a><br /> <br/><br/> <input type="text" id="txtData" /> <br/> <script type='text/javascript'> function handleDownload() { //テキストボックスの値を取得 var txtData = document.getElementById("txtData").value; //ファイルタイプ、保存するテキストを指定してblobを作成 var blob = new Blob([ txtData ], { "type" : "text/plain" }); //ファイルをダウンロード if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(blob, "test.txt"); // msSaveOrOpenBlobの場合はファイルを保存せずに開ける window.navigator.msSaveOrOpenBlob(blob, "test.txt"); } else { document.getElementById("download").href = window.URL.createObjectURL(blob); } } </script> <a id="download" href="#" download="test.txt" onclick="handleDownload()">入力したテキストをダウンロード</a> </body> </html>
まとめ
今回は、ファイルダウンロード機能の作り方についてご紹介しました。WEBアプリを作る場合、ファイルのダウンロード機能を使うケースは多いです。
今回説明した方法はどれも簡単に使うことができるので、ぜひ使ってみてくださいね!