Struts – Webサイトの例からファイルをダウンロードする
ユーザーがStrutsWebプロジェクトからファイルをダウンロードできるようにするには、通常のHTMLページの代わりにアプリケーションファイルを返すように「HttpServletResponse」に通知する必要があります。
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=downloadfilename.csv");
サーバー側では、3つの異なる方法からダウンロードファイルを取得できます。
1. ファイルシステム
ファイルシステムから取得する
FileInputStream in = new FileInputStream(new File("C:\\filename.zip"));
2. プロジェクトWebパス
ファイルが「http://yourname.com/StrutsExample/upload/filename.zip」にあり、「StrutsExample」がプロジェクト名(serlvetコンテキスト)であると想定します。
//jndi:/yourname.com/StrutsExample/upload/filename.zip URL url = getServlet().getServletContext().getResource("upload/filename.zip"); InputStream in = url.openStream();
3. バイト配列
データベースからファイルまたはblobデータを取得する場合、通常はバイト配列として返されます。
byte[] bytes = new byte[4096]; InputStream in = new ByteArrayInputStream(bytes);
このStrutsダウンロードファイルの例をダウンロードする–Struts-Download-File-Example.zip
1. アクションクラス
通常のHTMLページの代わりにアプリケーションファイルを返し、ユーザーがダウンロードする「superfish.zip」ファイルを取得するアクションクラス。
package com.example.common.action; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class DownloadFileAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //return an application file instead of html page response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition","attachment;filename=superfish.zip"); try { //Get it from file system FileInputStream in = new FileInputStream(new File("C:\\superfish.zip")); //Get it from web path //jndi:/localhost/StrutsExample/upload/superfish.zip //URL url = getServlet().getServletContext() // .getResource("upload/superfish.zip"); //InputStream in = url.openStream(); //Get it from bytes array //byte[] bytes = new byte[4096]; //InputStream in = new ByteArrayInputStream(bytes); ServletOutputStream out = response.getOutputStream(); byte[] outputByte = new byte[4096]; //copy binary content to output stream while(in.read(outputByte, 0, 4096) != -1){ out.write(outputByte, 0, 4096); } in.close(); out.flush(); out.close(); }catch(Exception e){ e.printStackTrace(); } return null; } }
2. JSPページ
Download file from server -
3. struts-config.xml
Struts構成ファイル。