• ベストアンサー

jspからcsvファイルのダウンロード

あるjspから、サーバ上に保存してある hoge.csvデータをダウンロードするには どのような方法がありますでしょうか? 動作としては、jsp内のボタンをクリックして、 特定のディレクトリにあるhoge.csvをダウンロードします。 色々調べてみましたが、サーブレットを経由しダウンロードさせるのが、 一般的なようですが、具体的な方法がわかりません。 1.jsp内のボタンに対する指示と、 2.(サーブレット)を読む場合ダウンロードに必要な指示 3.(サーブレットを動作させるための指示等) をご教示いただければと存じます。 宜しくお願いいたします。

  • sdzgq
  • お礼率41% (5/12)
  • Java
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.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(); } } } }

sdzgq
質問者

お礼

LancerVII様 ご連絡遅くなりもうしわけございません。 ご丁寧にいくつもの方法をご教授いただきありがとうございました。 こちらのボタンの方法で試してみます。

関連するQ&A

  • CSVダウンロード後のアラート表示

    JSPとサーブレットを使っています。 CSVファイルをダウンロードし保存終了した後に「保存しました」とアラートを表示させたいのですが可能でしょうか?

  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • JSPでCSVのダウンロード処理

    仕事でJavaのWebシステムを組むことになったのですが、そのシステムの中にCSVファイルのダウンロードという機能を入れることになりました。 サーバのOSはLinuxなのですが、クライアントのOSはWindowsです。 CSVファイルは、クライアントにダウンロードして使うものなので、Linuxの文字コード体系がEUCだろうが、とにかく使う側の文字コードにあわせてやれば問題ないと思っています。 Linuxサーバ上で動くJSPで、文字コードをEUC以外にして(Shift-JISで)ダウンロード処理はできますよね? 私は出来るものと思っていたのですが、今回の仕事のメンバーに聞かれて、ちょっと不安になってきました。

    • ベストアンサー
    • Java
  • JSPの質問です。IEでCSV形式のファイルはダウンロード可能でしょうか?

    今、JSPをやっています。IEでCSV形式のファイルをダウンロードさせて表示させようとしているのですが、IEの 「コンテンツのタイプを経験的に判断し、サーバが指定したコンテンツタイプを無視して、コンテンツを普通に表示してしまう」 という機能のせいで困っています。 はたして、IEでCSV形式をJSPでダウンロードさせ、正しく表示させることはできるのでしょうか? ネスケに変えれば問題ないのかもしれませんが、JavaScriptをかなり使ってもいるので、ネスケだと今度はJavaScriptに依存している部分がおかしくなってしまうため、できればIEで続行したいのです。 お分かりになるかた、どうか解答をお願いいたします。

    • ベストアンサー
    • Java
  • CSVファイルがダウンロードできない?

    スズキといいます。 困ってます。よろしくお願いします。 HP上から CSVファイルをダウンロードするボタンを押すんですが サーバがみつかりませんになってしまいます。 OSは、2000です。 いろいろやってますが 解明できません。 なぜでしょうか? おわかりになる方、助けてください。

  • サーブレットとJSPのディレクトリ指定について

    現在WebサーバーとしてTomcatを使用しているのですが、題記の通り質問があります。 JSPのディレクトリ構成は C:\Program Files\Apache Tomcat 4.0\webapps\(JSPを保存するディレクトリ) というようにwebappsのしたにディレクトリを作成しました。 JSPからサーブレットを呼ぶために、 現在は C:\Program Files\Apache Tomcat 4.0\webapps\(JSPを保存するディレクトリ) \WEB-INF\classesディレクトリに格納しています。 できれば、sevletディレクトリを作りわかりやすい構成にしたいのですが、 そのようにやることはできるのでしょうか?

  • CSVファイルのダウンロードについて

    サーバー上にアップしたcsvファイルにアクセスすると ダウンロードの確認ダイアログが出ずに 画面上にテキストベースで表示されてしまいます。 フォルダオプションの設定で ダウンロード後に開くを確認するのチェックボックスを チェックしましたがうまくいきません。 宜しくお願いします。 ※Webサーバー・・・JRUN4 <-- sample.jsp --> <% response.setContentType("application/octet-stream-dummy; charset=iso-2022-jp"); %> <% response.setHeader("Content-Disposition","inline; filename=aaa.csv"); %> top.location.href=~aaa.csv ← ファイルのフルパス

    • ベストアンサー
    • Java
  • ダウンロードファイルの保存ディレクトリについて

    PHPでCSVをダウンロードするプログラムを作成しております。そこで質問ですが、ダウンロードダイアログが表示され、保存ボタンを押下したときに保存するディレクトリを常に同じ場所にする方法はあるのでしょうか?あるようでしたら方法を教えて下さい。

    • ベストアンサー
    • PHP
  • mysqlのcsvファイル出力について

    今jspファイルでボタンを押すとサーバーにあるデータベースの結果をcsvファイルとして保存するファイルを作りました。 今、作業用のパソコンからテラタームを使い、リモート接続で作業をしています。 なので出力するcsvファイルをサーバーの方ではなく、作業用のパソコンに落としたいのですが、方法はないですかね? 今はjspのほうでSELECT * FROM テーブル名 INTO OUTFILE のコマンドをmysqlに送っています。 phpmyadminで接続してそこからcsvファイルを落とすと閲覧しているパソコンに落ちるようになってるのでそ それができたらなと思います。 何かいい方法はないでしょうか? よろしくお願いします。

  • ファイルダウンロードの開くで、CSVファイルが開けない

    表記の件についてかなり困っています。 教えてください。 【環境】  Windows2000 SP4 + ASP 【内容】  現在CSVファイルをダウンロードする仕組みをASPで作成しています。 とりあえず、ダウンロードダイアログがでてくるところまではでき、保存ボタンでも正常に保存できるところまではできたのですが、開くボタンをクリックすると、EXCEL(CSVをEXCELに関連付けしているため)が起動された後に、 ”出力ファイル名[1].csv”が見つかりません。という エラーとなり表示されません。 この原因は何なのでしょうか? 宜しくお願いします。 【ロジック】 ダウンロードロジックは以下のようにしています。 Response.ContentType = "application/octet-stream" Response.AddHeader "content-disposition","attachment; filename=光彩.csv" strFilePath = "C:\Inetpub\wwwroot\CoreSt\光彩.csv" Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary objStream.LoadFromFile strFilePath Response.BinaryWrite objStream.Read objStream.Close Set objStream = Nothing

専門家に質問してみよう