ダウンロードが正常終了するけど件数が少ない。。。

このQ&Aのポイント
  • ファイルのダウンロード時に、実際のファイルの半分程度しかダウンロードできない現象が発生しています。
  • アクセスログ上にはダウンロード失敗やエラーは表示されていません。
  • 回線が途切れたわけでもなく、HTTP上でこの現象が起こることは可能なのか疑問です。
回答を見る
  • ベストアンサー

ダウンロードが正常終了するけど件数が少ない。。。

こんにちわ。 サーブレットであるファイルをダウンロードしようとしたら 実際のファイルの半分程度しかダウンロードできませんでした。 ちなみにアクセスログ上はダウンロード失敗等のエラーもでていません でした。。。 回線が途切れたわけでもないのにこのような現象が起こりえるのでしょうか? response.setHeader("Pragma", "private"); response.setHeader("Cache-control", "private"); response.setHeader("Content-Disposition", "inline; filename=\ファイルパス\"); response.setContentType("text/*; encoding=Shift_JIS"); の様な感じです。。。。 まず、HTTP上で消える、切れる等が起こりえるのでしょうか? どなたか経験のある方がいらっしゃればよろしくお願いします。

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

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>HTTP上で消える、切れる等が起こりえるのでしょうか? HTTPはTCP上のプロトコルですから通信上のデータが消えると言うことは基本的にありえません。 データがの行方は通信の解析ソフト(パケットキャプチャなど)を利用して調べて見てください。 あとはsetContentLengthが指定されていないところが気になります。できれば指定した方がいいでしょう。

jk_beck
質問者

お礼

ご回答ありがとうございます。 解析ソフトではパケット上でバイト数がやはり減っていました。 原因がわかったので記載します。 IEでダウンロードを行なう際は、保存、キャンセル等のメッセージが 表示されると思うのでが、そのメッセージが出ている状態で裏では ダウンロードが始まっているようです。 ここで放置しておくとブラウザのタイムアウトが発生して、裏で始まって いたダウンロード分だけがダウンロードされてしまうとの現象でした。 タイムアウト時間を延ばして対応ができました。

関連するQ&A

  • BLOBをダウンロードして別ウインドウで表示したい。

    申し訳ありありませんが、どなたか答えていただけると幸いです。 byte[] data = bl.getBytes(1, (int)bl.length()); int imgSize = (int)bl.length(); String file = URLEncoder.encode(rs_index.getString(ファイル名)); response.setContentType("application/octet-stream-dummy"); response.setHeader("Content-Disposition","inline; filename=\"" + file + "\""); response.setHeader("Pragma", ""); response.setHeader("Cache-Control","max-age=0"); response.setContentLength(data.length); response.getOutputStream().write(data); response.flushBuffer(); こんな感じなのですが、IEでダウンロードして表示をしますと、 IEでEXCELなどが表示されてしまいます。 エクスプローラの設定をいじらずに、EXCELはEXCELで表示するように できないのでしょうか? HTMLのように、target="_blank"みたいにしたいのですが・・・ 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
  • ファイルダウンロード後のフォワードについて

    サーブレット内で、ファイルのダウンロードをした後に処理をJSPへフォワードしたいのですが、現在、ダウンロードしたあとフォワードしてもJSPが機能しなくて困りました。 コードとしては以下の通りです(一部抜粋ですみません) /* ファイルダウンロードの設定 */ response.setContentType("application/octet-stream; charset=Shift-JIS"); response.setHeader("Content-disposition","attachement; filename= "+sgy_y+sgy_m+"_"+simekbn+".csv"); PrintWriter pw = response.getWriter(); /* CSVファイル出力 */ pw.println("あああ,いいい,ううう,えええ,おおお"); pw.println("かかか,ききき,くくく,けけけ,こここ"); pw.println("さささ,ししし,すすす,せせせ,そそそ"); pw.close(); /* JSPへフォワード */ getServletConfig().getServletContext().getRequestDispatcher("/xxx.jsp").forward(request,response); 何か良いアドバイスがありましたら、宜しくお願いします。

    • ベストアンサー
    • Java
  • 日本語名のファイルのダウンロード

    ファイルのダウンロードを行う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
  • ファイルのダウンロード先を初期設定するには?

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

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

    サーブレットでファイルのダウンロードを 行うプログラムを作成しているのですが ときどきダウンロードするファイルが切れている 場合があります。 なので実際のファイルとダウンロード時のファイル の違いがあった場合はJSPでalert表示を行いたい のですが、うまく実行できません。 処理としては response.setHeader(......) response.setContentType(......) 等の設定を行い ダウンロードするファイルのInputStream を作成、OutputStreamにgetOutputStream() を取得してwriteしています。 上記のwriteする時に件数をカウントして このサーブレットの呼び元のjspに返却したい のですが、取得ができません。 何か参考になるサイトなどないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • HttpServletResponseの詳細

    こんにちは。 HttpServletResponseの中で setHeader("Pragma", "no-cache"); setContentType("text/*; encoding=Shift_JIS"); のように設定する場合の規定値?定数?の 部分の(上記ではPragma、no-cache、text/*; encoding=Shift_JIS) 一覧と意味が記載されているサイトを教えて いただけないでしょうか? もしくは、selvletapiのjavadocに記載されて いるのでしょうか? どなたかお願いします。 m(_ _)m!!

    • ベストアンサー
    • Java
  • ファイルのダウンロードダイアログが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台づつあるだけなので、 これもなんともいえません。 どなかた解決方法をご存知の方がおられましたら、 御教授頂けますでしょうか。 よろしくお願いします。

  • ファイルのダウンロードが遅い

    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
  • 長いファイル名が化けてしまう

    ファイルをダウンロードする際に、ファイルを読み込み、 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で動作することが仕様となっています。

専門家に質問してみよう