- PR -

テキストファイルダウンロードでJSPの出力が含まれる

投稿者投稿内容
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 14:15
いつも参考にさせていただいております。

件名の件について質問させてください。
今TOMCAT上で動作するファイルダウンロード処理を作成しております。そこで以下の問題が発生しました。

・テキストファイルをダウンロードすると末尾にJSP(JSF)の出力が含まれている。

たぶんダウンロードするテキストファイルとHttpServletResponseオブジェクトに含まれているJSP(JSF)の出力が混ざっていると思われるのですが回避方法がわかりません。

ちなみに、JPEGファイルやZIPなどの圧縮ファイルは正常にダウンロードできます。
以下ダウンロード処理のソースです。
------------------------------------------------------------------------
response.setContentType(getContentType(fileName));
response.setHeader("Content-Disposition", "attachment; filename=\\\\"" + encode(fileName) + "\\\\"");

String uploadDir = UploadUtil.getUploadFullPath();
BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
BufferedInputStream input = new BufferedInputStream(new FileInputStream(uploadDir + fileName));

byte buf[] = new byte[256];
int len;
while ((len = input.read(buf)) != -1) {
output.write(buf, 0, len);
}
output.close();
input.close();
---------------------------------------------------------------ソースここまで

開発環境
・MyFaces(これが悪さをしてる??)
・TOMCAT5.0.30

なにか分かる方がいらっしゃいましたらご教授願います。
未記入X
大ベテラン
会議室デビュー日: 2005/05/19
投稿数: 136
投稿日時: 2005-06-23 14:24
以前、ファイル出力処理を作り込んで居た時に似たような現象に遭遇したことがあります。
原因は
「Servletや、そこから呼び出すメソッドの処理中に例外が投げられて、
 Output.Close()を通らずにResponseを返していた」
でした。

もし該当すれば儲けもの。外してたら申し訳ないですが。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 14:38
早速の返信ありがとうございます。

output.close();の後にデバッグプリントを入れてみましたが、
正常に終了しているようでした。

また、なにかあればよろしくお願い致します。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-23 16:16
こんにちは。
不思議な現象ですね。

引用:

takashiさんの書き込み (2005-06-23 14:15) より:
・テキストファイルをダウンロードすると末尾にJSP(JSF)の出力が含まれている。



末尾に含まれている出力内容を記載して頂くことは可能でしょうか。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 16:59
masaさんこんにちは。

ほんとに不思議で困ってます。。
実際に確認した例は以下のとおりです。

--アップロードしたテキストファイルの中身-------------------------------
テキストファイルです。
--------------------------------------------------------------ここまで

--同ファイルをダウンロードした結果-------------------------------------
テキストファイルです。





<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<title>DOWNLOAD</title>
</head>
<body class="content">
<div class="download">
<h2>ファイルのダウンロード</h2>
(以下略)
--------------------------------------------------------------------ここまで

何か分かりましたらよろしくお願い致します。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-23 17:09
引用:

takashiさんの書き込み (2005-06-23 16:59) より:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<title>DOWNLOAD</title>
</head>
<body class="content">
<div class="download">
<h2>ファイルのダウンロード</h2>
(以下略)
--------------------------------------------------------------------ここまで



まるまるhtmlですね。
この内容のjspへフォワードする記述がどこかへ入っていたりしませんか?
mone
常連さん
会議室デビュー日: 2005/05/18
投稿数: 37
投稿日時: 2005-06-23 17:33
こんにちは、moneです。
話の流れから推測するに、
ダウンロード後に違う画面に遷移させたいということですかね?
けれども、レスポンスに

引用:

response.setContentType(getContentType(fileName));
response.setHeader("Content-Disposition", "attachment; filename=\\\\\\\\\\\\\\\\"" + encode(fileName) + "\\\\\\\\\\\\\\\\"");


しているので、遷移後に表示させたい画面のHTMLまでダウンロード用のデータとみなされている。

引用:

たぶんダウンロードするテキストファイルとHttpServletResponseオブジェクトに含まれているJSP(JSF)の出力が混ざっていると思われるのですが回避方法がわかりません。



これを回避して、ダウンロード後に画面遷移させたいということかな?
それなら当然JSPへのフォワードはありそうですね。
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2005-06-23 17:40
まるまるhtmlなんです。。

JSPへのフォワードはJSFが制御しています。
そこが原因となっているのでしょうか。

JSFではStrutsのように"success"等の文字をリターンすることで画面遷移を行い、
文字列をリターンしければ次画面に遷移するのでかならずフォーワードされることになるのでしょうか??

そのあたりに絞って調査してみます。

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