サンプル
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 implementation class SampleFileDownloadControl */ public class SampleFileDownloadControl extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SampleFileDownloadControl() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.download(request, response, new File("c:\\Temp\\Sample.txt")); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } private void download(HttpServletRequest request, HttpServletResponse response, File downloadFile) throws ServletException, IOException { try (OutputStream outputStream = response.getOutputStream(); FileInputStream fileInputStream = new FileInputStream(downloadFile); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);) { // レスポンス設定 response.setContentType("application/octet-stream"); // 文字化け対策 response.setContentType("text/html; charset=UTF-8"); // "Content-Disposition: attachment"により、ブラウザ側ではダウンロードダイアログが表示される response.setHeader( "Content-Disposition", String.format("attachment; filename=\"%s\"", downloadFile.getName())); SampleFileDownloadControl.writeStream(bufferedInputStream, outputStream); } catch (IOException ex) { ex.printStackTrace(); } } private static void writeStream( InputStream inputStream, OutputStream outputStream) throws IOException { int availableByteNumber; while ((availableByteNumber = inputStream.available()) > 0) { byte[] buffers = new byte[availableByteNumber]; int readByteNumber = inputStream.read(buffers); if (readByteNumber < 0) { break; } outputStream.write(buffers, 0, readByteNumber); } } }
参考文献
全体のつくり
http://www.syboos.jp/java/doc/file-download-by-servlet.html文字化け対策
http://www.javaroad.jp/servletjsp/sj_servlet13.htmhttp://javatec.blog105.fc2.com/blog-entry-22.html