(メモ)ダウンロードボタンの作り方

この記事は約4分で読めます。

下記コードの”API_URL”を書き換えて、カスタムHTMLへ記載すればダウンロードボタンが出来上がる

<!--ダウンロードボタンのスタイルを規定している-->
<style>
	.btn--orange,
	a.btn--orange {
		color: #fff;
		background-color: #1e88e5;
	}

	.btn--orange:hover,
	a.btn--orange:hover {
		color: #fff;
		background: #1e88e5;
	}

	a.btn--radius {
		border-radius: 100vh;
	}
</style>

<!--ダウンロードボタンのHTMLタグ-->
<a class="btn btn--orange btn--radius">
	<button  type="button" onclick="download_api('API_URL')">
		Download CSV
	</button>
</a>

<!--APIからJSONをダウンロードし、CSVに書き出している。-->
<script>
	async function download_api(url) {
		const request = await fetch(url);
		const response = await request.json();

		//json=>csv
		var header = Object.keys(response[0]).join(",") + "\n";
		var body = response
			.map(function (d) {
				return Object.keys(d)
					.map(function (key) {
						return d[key];
					})
					.join(",");
			})
			.join("\n");

		csv = header + body;

		//csv download
		//ダウンロードするCSVファイル名を指定する
		const filename = "sql_yoron.csv";
		//CSVデータ
		const data = csv;
		//BOMを付与する(Excelでの文字化け対策)
		const bom = new Uint8Array([0xef, 0xbb, 0xbf]);
		//Blobでデータを作成する
		const blob = new Blob([bom, data], { type: "text/csv" });

		//BlobからオブジェクトURLを作成する
		const download_url = (window.URL || window.webkitURL).createObjectURL(blob);
		//ダウンロード用にリンクを作成する
		const download = document.createElement("a");
		//リンク先に上記で生成したURLを指定する
		download.href = download_url;
		//download属性にファイル名を指定する
		download.download = filename;
		//作成したリンクをクリックしてダウンロードを実行する
		download.click();
		//createObjectURLで作成したオブジェクトURLを開放する
		(window.URL || window.webkitURL).revokeObjectURL(download_url);

		return response;
	}

</script>

参考文献