タイトル: CSVファイルのダウンロード
SEOタイトル: PHP / Laravel で CSV ファイルをダウンロードする方法
この本文には実行可能なタグ等が含まれるため、安全のためHTMLソースとして表示しています。本文データは変更していません。
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<thead>
<tr><th style="background-color:#f39c12;color:#ffffff;text-align:left">この記事の要点</th></tr>
</thead>
<tbody>
<tr>
<td style="background-color:#fef9e7">
<ul>
<li>Java/Spring + Ajax で<strong>CSV ファイルをダウンロード</strong>する実装パターン</li>
<li>クライアント: <code>$.ajax</code> でリクエスト、<strong>Blob として受け取り</strong>てダウンロード</li>
<li>サーバ: <code>Content-Type: text/csv</code> + <code>Content-Disposition: attachment; filename=...</code></li>
<li>Excel の文字化け対策に<strong>UTF-8 BOM</strong> 付与が定石(先頭に <code>\uFEFF</code>)</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>本稿は<strong>Ajaxを用いたCSVファイルのダウンロード方法</strong>を記載します。</p>
<p>尚、実装例のサーバーサイド言語はJavaのSpring Frameworkとします。(適宜読み替えて下さい。)</p>
<p> </p>
<h2>HTML</h2>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff"><button id="download" type="submit">ダウンロード</button></span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2>Javascript</h2>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff">$("#download").click(function() {<br />
$.ajax({<br />
method: 'post',<br />
url: 'csvDownload',</span></p>
<p><span style="color:#ffffff"> }).done(function(data, status, jqXHR) {<br />
let downloadData = new Blob([data], {type: 'text/csv'});<br />
let filename = 'test.csv'</span></p>
<p><span style="color:#ffffff"> let downloadUrl = (window.URL || window.webkitURL).createObjectURL(downloadData);<br />
let link = document.createElement('a');<br />
link.href = downloadUrl;<br />
link.download = filename;<br />
link.click();<br />
(window.URL || window.webkitURL).revokeObjectURL(downloadUrl);</span></p>
<p><span style="color:#ffffff"> });<br />
}<br />
);</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2>Java</h2>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff">@RequestMapping("csvDownload")<br />
public void csvDownload(HttpServletResponse response) {</span></p>
<p><span style="color:#ffffff"> response.setContentType(MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE + ";charset=utf-8");<br />
response.setHeader("Content-Disposition", "attachment; filename=\"test.csv\"");</span></p>
<p><span style="color:#ffffff"> try (PrintWriter printWriter = response.getWriter()) {</span></p>
<p><span style="color:#ffffff"> String str = "a" + "," + "1" + "\r\n";</span></p>
<p><span style="color:#ffffff"> printWriter.print(str);</span></p>
<p><span style="color:#ffffff"> } catch (IOException e) {</span></p>
<p><span style="color:#ffffff"> e.printStackTrace();</span></p>
<p><span style="color:#ffffff"> }<br />
}</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>