ファイルアップロード/ダウンロード |
ローカルで作ったファイルをサーバに送信し、保存したり、サーバ側のファイルをダウンロードする方法。
ファイルアップロードHTML, JSP側の実装ファイルダウンロードHTML, JSP側では、Inputタイプ(File)のフィールドを使い、 フォームに、ENCTYPE="multipart/form-data" を追加する。
<FORM NAME="Form1" METHOD="POST" ACTION="/url" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" name="FileUpload">
...その他のコード
</FORM>
サーバ側の実装RFC 1867をきちんとお勉強すれば実装できるんだろうけど、ここでは手っ取り早い方法を示します。
- 本屋さんに行って、Java Servlet Programming (O'Reilly)の本を買う。非商用であれば、買わ なくてもOK。商用のシステムであれば、そのプロジェクトに一冊あればOK。
- http://www.servlets.com/cos/index.htmlからcosのライブラリをダウンロードして MultipartParserクラスを使うか、MultipartRequestクラスを使って実装する。
- MultipartParserクラスの使い方は、MultipartRequestクラスを参照すれば、わかるでしょう。ようは、字句 解析されたコンテンツがFileだったら、それをFileOutputStreamを使ってサーバ側に保存すればOKです。
サーバ側の保存先ディレクトリは、プロパティファイルなどの方法で決め打ちにするか、適当に。
単純にHTMLベースで解決するばあい、Webサーバで仮想ディレクトリを設定し、ダウンロードさせるファイルにリンクを設定す る。または、サーバ側でファイルを編集して、ローカルに送りつける場合、HttpServletResponse.getOutputStream ()で取得したストリームに対して出力する。
// サンプルソース response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + this.filename + "\""); response.setHeader("Content-Description", "file download test"); // サーバ側のファイルをローカルに出力する場合 BufferedInputStream in = new BufferedInputStream(new FileInputStream("/usr/local/file/test.doc")); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); int x; while ((x = in.read()) >= 0) { out.write(x); } in.close(); out.close();
試してませんが、最近では、Jakarta Commonsのfile Uploadが手っ取り早いかもしれませんね。