【Servlet】 ファイル ダウンロード

サンプル

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);
       }
    }
}


関連記事

Servlet】 ZIP圧縮と同時にファイルをダウンロードさせる

http://blogs.yahoo.co.jp/dk521123/33647497.html

Java】URLからファイルをダウンロードするには...

http://blogs.yahoo.co.jp/dk521123/34362429.html