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.