- PR -

Struts Actionクラスでのダウンロード

投稿者投稿内容
せんせ
会議室デビュー日: 2005/09/08
投稿数: 12
投稿日時: 2005-09-12 09:52
枠上コンドル様
返答ありがとうございます!返事が遅れてしまい、申し訳ないです。
下記の内容、早速試してみます。
結果は後ほど報告いたします。

引用:

枠上コンドルさんの書き込み (2005-09-09 22:42) より:
私も似たような現象になったことがあります。

http://support.microsoft.com/default.aspx?scid=kb;ja;896219

web等で調査した結果、私の環境では以下のようにすることで
正常ダウンロードができるようになりました。

response.setContentType("application/octet-stream;charset=Windows-31J");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "");
response.setHeader("Content-Disposition", "attachment; filename=xxx.csv");

参考になれば幸いです。

せんせ
会議室デビュー日: 2005/09/08
投稿数: 12
投稿日時: 2005-09-12 11:05
枠上コンドル様、uk様、インギ様
ご助力をいただき、ダウンロード部分が意図する形で実現できました。

uk様よりいただいたコメントから
PrintWriter writer = response.getWriter();
writer.write(output);

上記を使用すると、XMLのダウンロード時にHTMLのタグが挿入される形になってしまうため、使用できませんでした(ToT)

下記のソースコードが修正を加えて動作する形になったものです。
これは確証ではないのですが、response.setHeader()メソッドでセットする順番も関係してくるものかな?と思います。
Content-Dispositionの後にPragmaやCache-Controlをセットしても動作しなかったもので・・・^^;

みなさんありがとうございました。またよろしくお願いします

//下記はアクションクラスでダウンロードを呼び出す部分です

writeToStream("CSV", output, "test", response);
//response.getOutputStream().flush();
//response.getOutputStream().close();
return null;

//ダウンロードメソッド
void writeToStream(String format, String output, String fileName, HttpServletResponse response)
{
try
{
String fileNameExt = "";

if("CSV".equals(format))
{
fileNameExt = ".csv";
} else
if("XML".equals(format))
{
fileNameExt = ".xml";
}

//削除
//response.setContentType("application/octet-stream");
//response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + fileNameExt + "\"");
//response.setHeader("Cache-Control", "no-cache");

response.setContentType("application/octet-stream");
response.setHeader("Pragma", "");
response.setHeader("Cache-Control", "");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + fileNameExt + "\"");

if(output != null)
{
OutputStream os = response.getOutputStream();
OutputStreamWriter w = new OutputStreamWriter(os);
BufferedWriter writer = new BufferedWriter(w);
writer.write(output);
writer.close();
w.close();
}
}
catch(Exception e){
//ログ出力を行うクラスを使用し、例外を出力
log.debug("An exception occurred ProcessOrderDownload ", e);
}
}

スキルアップ/キャリアアップ(JOB@IT)