- ベストアンサー
jspからcsvファイルのダウンロード
あるjspから、サーバ上に保存してある hoge.csvデータをダウンロードするには どのような方法がありますでしょうか? 動作としては、jsp内のボタンをクリックして、 特定のディレクトリにあるhoge.csvをダウンロードします。 色々調べてみましたが、サーブレットを経由しダウンロードさせるのが、 一般的なようですが、具体的な方法がわかりません。 1.jsp内のボタンに対する指示と、 2.(サーブレット)を読む場合ダウンロードに必要な指示 3.(サーブレットを動作させるための指示等) をご教示いただければと存じます。 宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 JSPでもサーブレットでも以下のようなロジックになると思います。 (便宜上直接ファイル名を渡していますが、セキュリティ上問題がありますので実装する場合は注意下さい) 1)JSPについて(何種類かリンク方法を出してみました。 <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head> <title>CSVをダウンロード</title> <script type="text/javascript"> function download ( key ) { location.href = '../servlet/test.Download?key=' + key; } </script> </head> <body> <h1>CSVダウンロード</h1> <h2>JavaScriptで</h2> <button type="button" onclick="download('test1.csv');">test1.csv</button><br> <button type="button" onclick="download('test2.csv');">test2.csv</button><br> <button type="button" onclick="download('test3.csv');">test3.csv</button> <h2>submitで</h2> <form action="../servlet/test.Download" method="post"> <button type="submit" name="key">test1.csv</button><br> <button type="submit" name="key">test2.csv</button><br> <button type="submit" name="key">test3.csv</button> </form> <h2>リンクで</h2> <a href="../servlet/test.Download?key=test1.csv">test1.csv</a><br> <a href="../servlet/test.Download?key=test2.csv">test2.csv</a><br> <a href="../servlet/test.Download?key=test3.csv">test3.csv</a> </body> </html> 2,3)サーブレットの処理 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Download extends HttpServlet { public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { this.download ( request, response ); } public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { this.download ( request, response ); } private void download ( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { String strKey = request.getParameter ( "key" ); // ファイルを取得 File file = new File ( "R:\\" + strKey ); response.setContentType ( "text/plain" ); response.setHeader ( "Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); response.setContentLength ( (int)file.length() ); InputStream inputStream = null; ServletOutputStream outputStream = response.getOutputStream(); try { FileInputStream input = new FileInputStream ( file.getAbsoluteFile() ); byte[] buffer = new byte[4096]; int size; while ( (size = input.read(buffer)) != -1 ) { outputStream.write ( buffer, 0, size ); } } catch ( Exception e ) { e.printStackTrace(); } finally { if (inputStream != null) { inputStream.close(); } if ( outputStream != null ) { outputStream.close(); } } } }
お礼
LancerVII様 ご連絡遅くなりもうしわけございません。 ご丁寧にいくつもの方法をご教授いただきありがとうございました。 こちらのボタンの方法で試してみます。