- PR -

ファイルのダウンロードダイアログが2度表示される。

投稿者投稿内容
らふ
会議室デビュー日: 2003/08/04
投稿数: 5
投稿日時: 2003-08-04 16:37
いつも拝見させて頂いており、お世話になっています。
さて、困った事象が発生していて、お知恵をお借りしたく、投稿させて頂きます。
サーブレットで CSV データを作成し、直接データをダウンロードさせたいのですが、
IE6.0 SP1では(その他ブラウザでは確認していませんが)、
ファイルのダウンロードダイアログで”開く”を選択すると、同じダイアログが
2度表示されてしまいます。
”保存”を選択すると、ファイル保存場所を聞いてきて、2度は表示されません。
ソースは次の通りです。

res.setContentType( "application/octet-stream" );
res.setHeader("Content-Disposition","attachment;
filename=\"xxxx.csv\"" );
res.setBufferSize( 163840 );
out = res.getWriter();
out.println( 〜〜〜 );
out.close();

なお、2度とも”開く”を選択すると、問題なくファイルは開かれます。
どなたかご存知でしたら、教えてい頂きたく、
よろしくお願い致します。
makura
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 90
投稿日時: 2003-08-04 16:49
makuraです。

私も以前同じような現象に遭遇しました。
Content-Disposition: attachment; filename="xxxx.csv"
を、
Content-Disposition: inline; filename="xxxx.csv"
にしてみてはいかがでしょうか?

遠い記憶なので定かではありませんが、これで直ったように記憶しています。

らふ
会議室デビュー日: 2003/08/04
投稿数: 5
投稿日時: 2003-08-04 17:17
makuraさん。
さっそくのご返答ありがとうございます。

res.setContentType( "application/octet-stream" );
res.setHeader("Content-Disposition","inline;
filename=\"xxxx.csv\"" );

上記のように変更してみたところ、今度はファイルのダウンロードダイアログが
表示されなくなり、EXCEL で CSV項目が各セルに分解されずに、行まるごと
ひとつのセルに格納されて表示するようになってしまいました。
ダウンロードダイアログは表示されなくても良いのですが、
EXCEL でちゃんと表示されないとちょっと...
makura
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 90
投稿日時: 2003-08-04 17:31
makuraです。

IE5.5以降には、Content-Type: Application/Octet-Streamでダウンロードダイアログを出さないという問題があります。Content-Type: Application/Octet-Stream-Dummy など、存在しない Content-Type で試してみてください。ダウンロードできるはずです。たぶん。
ってattachmentの時はダウンロードできてたんですよねぇ。(^^;
Excelで行がつながるのは、もしかして中身はタブ区切りとかですか?


以下、MSのサポート情報です。

[FIX]既知の内容の種類に対して "Content-Disposition: Attachment" が機能しない
http://support.microsoft.com/default.aspx?scid=kb;ja;267991

[ファイルのダウンロード]ダイアログ ボックスが 2 つ表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;238588



[ メッセージ編集済み 編集者: makura 編集日時 2003-08-04 17:35 ]
らふ
会議室デビュー日: 2003/08/04
投稿数: 5
投稿日時: 2003-08-04 17:47
makuraさん。
ありがとうございました。
ダイアログが2度表示されなくなり、1度だけとなりました。
データはカンマ区切りですが、EXCEL での表示もちゃんとなりました。
ほんっとーに助かりました。
感謝いっぱいです。
みゆき
会議室デビュー日: 2004/07/02
投稿数: 6
投稿日時: 2004-07-02 15:42
私もらふさんと殆ど同じソース作りまして、同じ問題ありました。
ところで、res.setContentType( "application/octet-stream" );
をres.setContentType( "application/octet-stream-dummy" );に修正すると、
二度と表示しなくなりますか?
試してみましたが、二度開くのが変わりませんでした。
どのように修正して直れますか。
教えてい頂きたく、
よろしくお願い致します。
らふ
会議室デビュー日: 2003/08/04
投稿数: 5
投稿日時: 2004-07-02 16:31
わたしの場合、次のようの書いたら1度しかダイアログが
表示されなくなりました。参考として頂ければ幸いです。

res.setContentType( "application/octet-stream-dummy" );
res.setHeader("Content-Disposition","inline; filename=\"xxx.csv\"" );
res.setBufferSize( 163840 );
out = res.getWriter();
out.print(〜〜〜);
out.close();
みゆき
会議室デビュー日: 2004/07/02
投稿数: 6
投稿日時: 2004-07-02 19:35
さっそくのご返答ありがとうございます。

Content-Dispositionをinline;にセットしたら、エクスプローラにで問題なく動きました〜
但し、Netscape7.1で動かし見たら、勝手に拡張子.csvの後ろに.doが付いてしまいます(>_<)
アプリは、Strutsを用いて作成しており、アクションが「.do」である為、
この「.do」の部分がファイル名の後ろに付くのだかと思いますが、、、
この現象を回避する方法はありますでしょうか?
ご存知でしたら、是非教えていただきたいです。

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