Javaでファイルダウンロード
Javaでファイルをダウンロードする方法について調査した。
ファイルをBufferedInputStreamにし、viewへのリターン時にアノテーションでパラメータとして設定する。
以下Struts2を使用した実装例。
@Result(name="success", value = "inputStream", params = { "inputName", "inputStream", "contentType", "application/octet-stream; charset=UTF-8", "contentLength", "${contentLength}", "contentDisposition", "attachment; filename=${fileName}" }, type = StreamResult.class) public class DownloadAtion { /** ファイルダウンロード用InputStream */ private InputStream inputStream; /** ダウンロードファイル名 */ private String fileName; /** ダウンロードファイルサイズ */ private long contentLength; public String download() throws Exception { String sampleFilePath = "/usr/local/files/test.txt"; File downloadFile = new File(sampleFilePath); // ファイルが存在し、ディレクトリで場合にダウンロードを行う。 if (downloadFile.exists() && !downloadFile.isDirectory()) { try { // ダウンロード用にinputStream化する。 inputStream = new BufferedInputStream(new FileInputStream(sampleFilePath)); // ファイル名 fileName = URLEncoder.encode(downloadFile.getName(), "UTF-8");fileName = URLEncoder.encode(downloadFile.getName(), "UTF-8"); // ファイルのバイト数 contentLength = downloadFile.length(); return "success"; } catch (Exception e) { return "error"; } } // ファイルが存在しないか、パスがファイルでない場合はエラーを返す。 return "error"; } /** * ファイルダウンロード用InputStreamを取得します。 * @return ファイルダウンロード用InputStream */ public InputStream getInputStream() { return inputStream; } /** * ファイルダウンロード用InputStreamを設定します。 * @param inputStream ファイルダウンロード用InputStream */ public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } /** * ダウンロードファイル名を取得します。 * @return ダウンロードファイル名 */ public String getFileName() { return fileName; } /** * ダウンロードファイル名を設定します。 * @param fileName ダウンロードファイル名 */ public void setFileName(String fileName) { this.fileName = fileName; } /** * ダウンロードファイルサイズを取得します。 * @return ダウンロードファイルサイズ */ public long getContentLength() { return contentLength; } /** * ダウンロードファイルサイズを設定します。 * @param contentLength ダウンロードファイルサイズ */ public void setContentLength(long contentLength) { this.contentLength = contentLength; } }