public class FileDownloadUtil extends Object
DownloadFileNameEncoder実装クラスを
作成して、Bean定義ファイルで設定を行う必要がある。
DownloadFileNameEncoder実装例User-Agentでブラウザを判別し、
FireFoxの場合はcommons-codecのクラスを利用してエンコーディングを行っている。
public class MyEncoder implements DownloadFileNameEncoder {
public String encode(String original, HttpServletRequest request,
HttpServletResponse response) {
String userAgent = request.getHeader("User-Agent");
if (StringUtils.contains(userAgent, "MSIE")) {
return encodeForIE(original);
} else if (StringUtils.contains(userAgent, "Gecko")) {
return encodeForGecko(original);
}
return encodeForIE(original);
}
protected String encodeForGecko(String original) {
try {
return new BCodec().encode(original);
} catch (EncoderException e) {
return original;
}
}
protected String encodeForIE(String original) {
try {
return URLEncoder.encode(original,
AbstractDownloadObject.DEFAULT_CHARSET);
} catch (UnsupportedEncodingException e) {
return original;
}
}
}
<bean class="jp.terasoluna.fw.web.struts.actions.FileDownloadUtil">
<property name="encoder" ref="encoder"/>
</bean>
<bean name="encoder" class="sample.MyEncoder"/>
| 修飾子とタイプ | フィールドと説明 |
|---|---|
protected static DownloadFileNameEncoder |
encoder
指定ファイル名のエンコーダ。
|
static String |
HEADER_CONTENT_DISPOSITION
レスポンスの
CONTENT-DISPOSITIONヘッダ名。 |
static String |
TOO_MANY_DOWNLOAD_ERROR
ダウンロード対象のインスタンスが1つ以上ある場合のエラーコード。
|
| コンストラクタと説明 |
|---|
FileDownloadUtil() |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
static void |
download(AbstractDownloadObject downloadObject,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean forceDownload)
ブラウザにダウンロードをさせる。
|
static void |
download(Object result,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
ブラウザにダウンロードをさせる。
|
void |
setEncoder(DownloadFileNameEncoder encoder)
指定ファイル名のエンコーダを設定する。
|
protected static void |
setFileName(javax.servlet.http.HttpServletResponse response,
String name,
boolean forceDownload)
ファイル名を設定する
|
public static final String HEADER_CONTENT_DISPOSITION
CONTENT-DISPOSITIONヘッダ名。public static final String TOO_MANY_DOWNLOAD_ERROR
protected static DownloadFileNameEncoder encoder
public void setEncoder(DownloadFileNameEncoder encoder)
encoder - 指定ファイル名のエンコーダ。public static void download(Object result, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
result - ダウンロードデータを保持するインスタンス。request - リクエスト。response - レスポンス。public static void download(AbstractDownloadObject downloadObject, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, boolean forceDownload) throws IOException
downloadObject - ダウンロード対象。request - リクエスト。response - レスポンス。IOException - ダウンロード時に入出力例外が発生した場合。protected static void setFileName(javax.servlet.http.HttpServletResponse response,
String name,
boolean forceDownload)
response - レスポンス。name - ダウンロード名。forceDownload - 強制ダウンロードかどうか。trueの場合、強制。Copyright © 2014. All Rights Reserved.