日本語名のファイルのダウンロード

このQ&Aのポイント
  • 漢字を含むファイル名のファイルをダウンロードする際に、ファイルのダウンロードダイアログで正しいファイル名が表示されない問題についての解決方法を教えてください。
  • ファイルのダウンロードを行うservletで、漢字を含むファイル名の場合に正しいファイル名が表示されない問題が発生しています。レスポンスヘッダの設定は正しく行われているようですが、どうすれば正しく表示させることができるでしょうか。
  • ファイルのダウンロードダイアログで漢字を含むファイル名が正しく表示されない問題についての解決方法を教えてください。
回答を見る
  • ベストアンサー

日本語名のファイルのダウンロード

ファイルのダウンロードを行うservletを作成しています。 ところが漢字を含むファイル名のファイルをダウンロードしようとすると、ファイルのダウンロードダイアログでファイル名が正しく表示されません。どうやったら正しく表示できるようになるでしょうか?皆様のお知恵をお貸しください。 レスポンスヘッダには以下の設定をしています。 res.setContentType("application/octet-stream; charset=Shift_JIS"); res.setHeader("Content-Disposition", "attachment; filename=" + filename); filenameが"V003-0.pdf"の場合、ファイルのダウンロードダイアログで「ファイル名」は正しく表示され、「ファイルの種類」もAdobe Acrobat Documentとなりました。しかし"通達V003-0.pdf"というファイル名にしたら「ファイル名」は英数字に変わっており(さらに拡張子も表示されない)、「ファイルの種類」は表示されなくなってしまいました。 よろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • Struts
  • ベストアンサー率48% (29/60)
回答No.1

私はいつも response.setHeader("Content-Disposition", "filename=" + URLEncoder.encode("あいうえお.csv", "UTF-8")); response.setContentType("text/download"); としています。

echo2002
質問者

お礼

Strutsさんお返事ありがとうございます。 上記の設定で試してみたところ、ファイルのダウンロードダイアログが表示されず、いきなりAdobe Readerが起動してしまいました。 そこでいくつか設定を変えて、最終的には以下の設定にしました。 res.setContentType("application/octet-stream; charset=Shift_JIS"); res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); これで日本語名のファイルも問題なくダウンロードできました! とても助かりました。ありがとうございます。

関連するQ&A

  • ダウンロードファイル名の文字化けについて

    IE画面上にファイル名がリンク表示されており、 ファイル名のクリックで起動されるDownloadServletを作成しました。 日本語を含むファイル名のダウンロードを行うと、 「ファイルのダウンロード」ダイアログではファイル名がきちんと表示されるのですが、 「ファイルの保存」ダイアログでのファイル名が文字化けしてしまいます。 ダウンロード実施後のファイル名も文字化けのままです。 servletでのレスポンスヘッダの設定は以下のように行っています。 res.setContentType("application/octet-stream; charset=Shift_JIS"); res.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); 現象が起きている環境はWindows2000Professional, IE6.0で、 WindowsXPなら問題ありませんでした。 例えば「通達.pdf」というファイル名だと、 ”通達”という文字列が”騾夐#”と化けます。 多少調べてみたところURLEncoderではUTF-8コードを%+16進数文字に変換するので、 結果が以下のようになります。 %E9%80%9A%E9%81%94.PDF これをデコード時?にまずUTF-8として読んで、 それからSJIS変換すれば?ちゃんと読めるのかと思うのですが、 どうも「%E9%80%9A%E9%81%94」をそのままSJISコードとしてデコードして 「騾(E980)夐(9AE9)#(8194)」となっている感じです。 ダウンロード処理で出すダイアログはIEに依存しているので 特にデコードなどを自分で行っているわけではないですし、 WindowsXPではちゃんと表示されるなど、 デコード方式がOSに依存?しているような気もするので対処の方法がわかりません。 ダウンロードservletのプログラムの中でどうにか対処できるものなのでしょうか? わかりにくい質問ですみませんが、ぜひご回答よろしくお願いいたします。

    • ベストアンサー
    • Java
  • サーブレットからファイル名を指定してのダウンロード

     サーブレットからファイル名(csv)を指定してダウンロード する機能を開発しております。 操作の流れ  (1)HTMLでsubmitボタン押下→ダウンロードを問い合わせる   ダイアログ表示  (2)「このファイルをディスクに保存する」を選択し[OK]を押す  (3)「ファイルの保存」ダイアログで保存  (4)「ダウンロードの完了」ダイアログが表示される→[ファイル   を開く]を押すとexcelが起動しダウンロードしたcsvが表示   される。 しかし、(1)でダウンロードするよう促されるのがCSVではなく HTMLから呼び出したサーブレットなのです。  一応(2)~(4)の操作でcsvをダウンロードできますが、なぜか ブラウザ上でマウスポインタが作業中の状態(矢印と砂時計)の まま変りません。  次に、(1)で「このファイルを上記の場所から開く」を選択し 試しました。すると、同じダイアログでcsv(MASTER_*_*.csv) をダウンロードするよう促されます。 今度は(2)~(4)でダウンロードでき、上で起こったような現象 も起こりません(通常時のマウスポインタ)。  最初からcsv(MASTER_*_*.csv)をダウンロードするダイアログを 表示したいです。  そこで、最初のダイアログが表示されないよう設定したいと思い ますが、[この種類のファイルであれば常に警告する] チェックのON/OFF を切り替えられせん。   サーブレットの一部です。 res.setContentType("text/plain; charset=iso-2022-jp"); res.setHeader("Content-Disposition","attachment; filename=MASTER_" +  groupInp + "_" + factoryCode + "_" + date +".csv"); また、上記の"attachment; を"inline;に変えると、ブラウザの中にexcel が起動されてしまいます。 最初のダイアログの表示をサーブレットによって制御することは可能 でしょうか?ご存知の方いらっしゃればご教示いただきたく。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • CSVファイルのダウンロードについて

    サーバー上にアップしたcsvファイルにアクセスすると ダウンロードの確認ダイアログが出ずに 画面上にテキストベースで表示されてしまいます。 フォルダオプションの設定で ダウンロード後に開くを確認するのチェックボックスを チェックしましたがうまくいきません。 宜しくお願いします。 ※Webサーバー・・・JRUN4 <-- sample.jsp --> <% response.setContentType("application/octet-stream-dummy; charset=iso-2022-jp"); %> <% response.setHeader("Content-Disposition","inline; filename=aaa.csv"); %> top.location.href=~aaa.csv ← ファイルのフルパス

    • ベストアンサー
    • Java
  • 長いファイル名が化けてしまう

    ファイルをダウンロードする際に、ファイルを読み込み、 ServletOutputStreamに書き込んでいます。 その際に、ダウンロードファイル名に2バイト文字が 大量に含まれていると、クライアントから要求したサーブレット名に 置き換わってしまいます。 また、記号を含む長い日本語ファイル名をダウンロードした場合は 一部の文字だけが別の文字に置き換わっている現象も 発生します。 ASCII文字のみで構成されたファイル名、 もしくは短い日本語ファイル名であれば問題はありません。 ヘッダへの設定は以下の様に行っています。 response.setContentType( "application/octet-stream" ); response.setHeader( "Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode( downloadFileName, "UTF-8" ) ); Content-Dispositionに設定するファイル名を UTF-8でURLEncoder.encodeしているのですが、 ログ出力すると、2バイト文字のみのファイル名であれば 25~26文字程度を超えた時点で、MIME変換後の文字長が 255文字を超過してしまい、リクエスト要求したサーブレット名に 置き換わってしまうように見受けられます。 いま作っているシステムはInternetExploler5.5SP2以降のIEで動作することが仕様となっています。

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

    いつも拝見させて頂いており、お世話になっています。 ただ今困った事象が発生していて、お知恵をお借りしたく、投稿させて頂きます。 サーブレットで CSV データを作成し、直接データをダウンロードさせたいのですが、 OSが「WindowsXP SP1(SP2では未確認)」だと、ファイルのダウンロードダイアログで ”開く”を選択すると、同じダイアログが 2度表示されてしまいます。 (2度とも”開く”を選択すると、問題なくファイルは開かれます) ”保存”を選択した場合は2度は表示されません。 また、「Windows2000」の場合はこのような現象は発生しません。 ソースの要所は以下のようになっています。 response.setContentType("application/x-download;charset=Windows-31J"); response.setHeader("Content-Disposition", "attachment; filename=\"***.xls\""); 上記の1行目の「x-download」は「octet-stream-dummy」「msexcel」で 試してみましたが、結果は変わりませんでした。 また、2行目の「attachment」を「inline」にすると、 2度ダイアログが表示されるのは回避できますが、”開く”を選択すると ブラウザにExcelファイルの内容が表示されてしまいます。 もしかするとプログラムではなく端末の設定の問題かもしれませんが、 手元には2000とXPが1台づつあるだけなので、 これもなんともいえません。 どなかた解決方法をご存知の方がおられましたら、 御教授頂けますでしょうか。 よろしくお願いします。

  • Excelファイルをダウンロード

    Webページ上のあるボタンを押した時、サーバー上にExcelファイルを作成し、そのファイルをそのままクライアントにダウンロードするプログラムをつくろうとしています。その時、ダウンロードダイアログを表示させ、クライアントが任意の場所に保存できるようにしようと思っています。とりあえずファイルをダウンロードするクラスを下記のように作りました。 public class download { public static final int EOF=-1; public void downloader(HttpServletResponse res){ try { String fileName = "testExcel1.xls"; String CONTENT_TYPE = "application/atom"; res.setContentType(CONTENT_TYPE); res.setHeader("Content-Disposition", "filename=\""+ fileName +"\""); URL urlObj=new URL("サーバーアドレス:8080/DB/testExcel.xls"); InputStream in = urlObj.openStream(); FileOutputStream(new File("testExcel1.xls")); BufferedOutputStream bout= new BufferedOutputStream(res.getOutputStream()); int c; while( (c = in.read()) != EOF ) { bout.write(c); } bout.flush(); in.close(); } catch (Exception e ) { e.printStackTrace(); } } } このまま実行するとダウンロードダイアログは表示されず、Excelファイルの内容がクライアントのブラウザ上に表示されてしまします。どうしたらダウンロードダイアログが表示されるようになるでしょうか。アドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • ファイルのダウンロードが遅い

    windows環境のクライアントPCにブラウザからファイルをダウンロードさせる javaプログラムを作成しています。 linuxのサーバー側でcsvを圧縮したzipファイルを作成しているのですが zipの作成処理までは速いのに、その後のファイル保存のダイアログに とても時間がかかります。なぜなのか分からず困っています。 以下、保存ダイアログ表示のコードです。 --------------------------------------------- FileInputStream fi = new FileInputStream(ファイルパス/temp.zip); byte[] b = new byte[fi.available()]; for (int i = 0; i < b.length; i++) b[i] = (byte)fi.read(); response.setContentType("application/octet-stream; charset=Windows-31J"); response.setHeader("Content-Disposition","attachment; filename=\"temp.zip\""); response.setContentLength(b.length); ServletOutputStream os = response.getOutputStream(); os.write(b); os.close(); fi.close(); --------------------------------------------- ご教授お願いします。

    • ベストアンサー
    • Java
  • PHPでファイルをダウンロードさせるコード

    PDFファイルをその場では開かせず、ダウンロードさせるコードを作成しています header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($path_file) . '"'); header('Content-Length:' . $content_length); ファイルをダウンロードさせること自体は成功しており、ファイル容量も間違ってないのですが ダウンロード後に開こうとするとファイルが破損していて開くことができません。 また、ハイパーリンクから直接開かせた場合は問題なく表示できております。 原因の分かる方がいらっしゃいましたらアドバイスお願い致します。

    • ベストアンサー
    • PHP
  • ie8でのファイルダウンロード

    javaで作成したプログラムからファイルをダウンロードする際に、 稀にファイルと拡張子の間に半角英数字が8文字付加されて 保存先を指定するダイアログに表示される場合があります。 javaでは以下の様にファイル名を指定しています。(抜粋) strWorkFileName = "PO.DAT"; response.setHeader("Content-Disposition", "attachment;filename=" + strWorkFileName); 通常表示されるファイル名:PO.DAT まれに表示されるファイル名:POCAY7P4Y1.DAT CAY7P4Y1の箇所は現象が発生する度に異なります。 どなたか原因がわかるかたいらっしゃいませんか? 発生した環境 OS:Windows 7 ブラウザ:IE8

  • ファイルのダウンロード先を初期設定するには?

    サーブレットにファイルをダウンロードする機能を入れたいと思って います。 現在、HttpServletResponseオブジェクトを使用して下記のようにコー ディングしています。 ============================================= response.setHeader("Content-Disposition", "attachment;filename=sample.xls"); response.setContentType("application/vnd.ms-excel"); ============================================= これで問題なくダウンロードは出来るのですが、ダウンロード先の初期 表示をブラウザ(現在、IEを使用してます)に依存するのではなく、予 め指定したフォルダを初期表示して欲しいとの要望がありました。 ダウンロード先を初期設定するとはいえ、ユーザーが自由にファイル名 やダウンロード先を指定する機能は必要なので、FileOutputStreamを使 用してのファイルの保存は考えていません。 どのようにすれば、実現するのでしょうか? また、ファイルのダウンロード先を初期設定することは可能なのでしょ うか? それさえ判断が出来ずに困っています。 もし絶対に無理!ということであれば、それを教えて頂けるだけでも助 かります。

    • ベストアンサー
    • Java

専門家に質問してみよう