Servlet でファイル ダウンロード
2009/07/06 14:51Update
Java Servletでファイルをダウンロードする実装方法について解説します。
以下のその実装手順です。
1)ファイルからレスポンス出力
2)レスポンス設定
HttpServletResponse res = ...
//レスポンス設定
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "filename=\"ファイル名\"");
以下は実際の実装コードです。
Javaコード
ExternalUrlRedirectServlet.java
web.xml
.
ブラウザで
http://localhost:8080/download
または
http://yourdomain.com/download
へ入力してみます。
ブラウザ側ではダウンロードダイアログが表示されるはず。
1)ファイルからレスポンス出力
2)レスポンス設定
HttpServletResponse res = ...
//レスポンス設定
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "filename=\"ファイル名\"");
以下は実際の実装コードです。
Javaコード
ExternalUrlRedirectServlet.javapackage mypackage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ファイルダウンロードServlet
*/
public class FileDownloadServlet extends HttpServlet {
/*
* (non-Javadoc)
*
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
File fileOut = new File("c:\\out.pdf"); //出力ファイルのフルパス
printOutFile(req, res, fileOut);
}
/*
* (non-Javadoc)
*
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req, res);
}
protected void printOutFile(HttpServletRequest req,
HttpServletResponse res,
File fileOut)
throws ServletException, IOException {
OutputStream os = res.getOutputStream();
try {
FileInputStream hFile = new FileInputStream(filePath);
BufferedInputStream bis = new BufferedInputStream(hFile);
//レスポンス設定
res.setContentType("application/octet-stream");
res.setHeader("Content-Disposition", "filename=\"" + fileOut.getName() + "\"");
int len = 0;
byte[] buffer = new byte[1024];
while ((len = bis.read(buffer)) >= 0) {
os.write(buffer,0, len);
}
bis.close();
} catch (IOException e) {
printOutNotFound(res);
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
} finally {
os = null;
}
}
}
}
private void printOutNotFound(HttpServletResponse res) {
try {
OutputStream toClient = res.getOutputStream();
res.setContentType("text/html;charset=utf-8");
toClient.write("File not found".getBytes());
toClient.close();
} catch (IOException e) {
// do nothing
}
}
}
web.xml... <servlet> <servlet-name>FileDownloadServlet</servlet-name> <servlet-class>mypackage.FileDownloadServlet</servlet-class> </servlet> ... <servlet-mapping> <servlet-name>FileDownloadServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping> ...
.
ブラウザで
http://localhost:8080/download
または
http://yourdomain.com/download
へ入力してみます。
ブラウザ側ではダウンロードダイアログが表示されるはず。
Sponsored Link
Comments
- Relative Articles
- Java開発及び実行環境の構築 | Linux篇 - (2008/08/31 20:34)
- Java開発及び実行環境の構築 | Windows篇 - (2008/08/31 21:18)
- 5分でJava Hello World! - (2008/08/31 22:13)
- Java言語の制御構文 - 条件分岐if/else/else if - (2008/10/01 21:30)
- Java言語の繰り返し制御構文 - for文 - (2008/10/03 18:22)
- Java言語の繰り返し制御構文 - do ... while文 - (2008/10/03 21:23)
- Java言語の繰り返し制御構文 - while文 - (2008/10/03 21:32)
- Java言語の基礎 - javacコマンドによるコンパイル - (2008/10/10 17:58)
- Java アクセス修飾子概要 - (2008/10/29 18:31)
- Javaアノテーション機能 概要 - (2009/02/12 13:06)