• 締切済み

Javaのファイルダウンロードについて

Javaでファイルのダウンロード機能を作成しています。 環境はWebサーバにapache、APサーバにGlassfish、連携としてmod_jk、あとはJava6を使用しています。 InpusStreamでファイルパスから取得しresponse.getOutputStream()に書き込む処理writeにて org.apache.catalina.connector.ClientAbortExceptionが発生してしまいます。 その際にダウンロードのポップアップ(開く、保存、キャンセル)が開きますがExceptionが発生しているため保存できません。 ただしファイルのサイズによっては正常に保存できます。(ファイルサイズが500Mくらいだとダメ) なお、ClientAbortExceptionはキャンセル押したときに発生すると思われますがそのほかにどのような場合に発生するのでしょうか? また、対処方法を知っていましたらご教授ください。

  • Java
  • 回答数3
  • ありがとう数8

みんなの回答

  • teketon
  • ベストアンサー率65% (141/215)
回答No.3

>ファイルの容量によってapacheやmod_jkが切断することはありえるのでしょうか? やったことがないので知りません。 単純なwrite処理だけだとflushしません。その場合、クライアントからデータが来ないように見えてしまい、 キャンセルしているのではないか?ということです。

参考URL:
http://mergedoc.sourceforge.jp/tomcat-servletapi-5-ja/javax/servlet/ServletResponse.html#getOutputStream()
  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

>org.apache.catalina.connector.ClientAbortException:java.io.IOException: パイプが切断されました。 大きなファイルの送信に時間が掛かり、KeepAliveのTimeoutに到達、そして切断されているのではないでしょうか?

questionHuman
質問者

補足

ファイルのサイズは500Mくらいで大きいですが実際にExceptionが発生するまでの時間は数秒です。 ファイルの容量によってapacheやmod_jkが切断することはありえるのでしょうか?

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

とりあえず、Exceptionのログを提示して下さい。

questionHuman
質問者

補足

org.apache.catalina.connector.ClientAbortException:java.io.IOException: パイプが切断されました。

関連するQ&A

  • glassfishサーバーの場合のドメイン設定

    以前はPHPでの開発をしていたので、apacheを使ってバーチャルホストを設定し、独自ドメインによる検索が出来るようにしていました。 最近、PHPからJavaEEへ移行しようと勉強中なのですが、とりあえずglassfishサーバーを入れて、Webでの表示は確認したのですが、http://ipアドレス:8080というURLになってしまいます。そこで、以下の質問なのですが、一般的にJavaEEでの開発の場合、http://ドメイン名での検索を可能にするには、どのようにしているのでしょうか? (1)apacheとの連携が必要になるのでしょうか? (2)glassfishサーバーなどのアプリケーションサーバーにはドメインでの検索機能は付いていないのでしょうか? (3)少し調べたのですが、mod_jkなるもので連携するっぽいのですが、これですか? 早く、Java開発したいのに環境を整えるのにすごく手間取っています。知識のある方がいらっしゃいましたら、ご教授よろしくお願いします。

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

    ファイルをインターネットからダウンロードする時、実行・保存・キャンセルの画面が出て、保存や実行をクリックし、ダウンロードを完了するのですが、ダウンロードしたはずのファイルがダウンロード先にありません。ある特定のファイルということではなく、どんなファイルをダウンロードした時にもファイルがありません。どうすればいいでしょうか?

  • ダウンロードの仕方

    こんばんは~。 教えてほしいことがあるんですけど…。 サーバー(TOMCAT+アパッチ)にあるファイルのダウンロードってどうやるんですか? たとえばXMLファイルの場合、ブラウザからアクションなげたとき、ダウンロードされずにブラウザにXMLファイルの中身がそのまま表示されちゃいますよね??? あとCSVだとブラウザの中にエクセル形式で表示されちゃうし…。 これがjavaファイルだと普通にダウンロードのダイアログ(保存とか開くとかキャンセルとか選べるやつ!)が出ますよね? どうやって実装すればXMLファイルからもしくはCSVファイルからのダウンロードってできるのでしょうか? 意味不明なところは補足しますので、宜しくお願いします!

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

    winXPsp2でIE6を使ってファイルのダウンロードが出来ません。 開く、保存、キャンセルのとこまでは進むのですが、保存を押すと固まってしまいす。特定のファイルだけではないようです。 解るかたいらっしゃいますか。宜しくお願いします。

  • ファイルのダウンロードについて

    よく「次のファイルのダウンロードをしています」 開く  保存  キャンセル  詳細情報 ってのをよく見かけますが、中身を見たことがありません。 どのようにしたら開く事ができますか? いつもは「開く」で何とも無いので「保存」にしてます。 保存してあるファイルを開こうとしても開けません。 何故ですか???

  • XMLファイルのダウンロード

    こんばんは~ もしご存知でしたら教えていただきたいことがあります。 XMLファイルがサーバにあるとして、それってローカル(クライアント)に普通にダウンロードってできるものなんでしょうか??? JavaのServletを使って実装しているんですけど、javaファイルやCSVファイルのダウンロードはできるのにXMLファイルのダウンロードができません。 普通は保存とかキャンセルとかのボタンを押せるダイアログが出ますよね? でもXMLファイルだけはWEBブラウザに「XMLを表示できません」とでます。 XMLファイルってサーバーからクライアントにそのままダウンロードできないものなんですか??? 意味不明な点は補足させていただきますので、宜しくお願いします。

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

    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
  • ファイルのダウンロードについて

    ファイルをダウンロードするときにうまくいきません。 開く、保存をクリックしても何も起こりません。 exeも同じくダウンロードできません。 キャンセルと×しか反応しません。 これを直すにはどうしたらいいですか? セキュリティの問題なのでしょうか?

  • Javaコンパイルエラーについて

    「Java+MySQL+Tomcatで始めるサーバアプリケーション開発入門」という本の通りに tomcatをインストールして、http://localhost:8080/ にアクセスした所、 tomcatのトップページが出てこずに以下のようなエラーメッセージを出力しました。 これを対処するには具体的にどのようにすればいいのでしょうか。 宜しくお願い致します。 type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: JSPのクラスをコンパイルできません JSPファイル: null の中の行: -1でエラーが発生しました 生成されたサーブレットのエラーです: [javac] Compiling 1 source file C:\Program Files (x86)\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\index_jsp.java:8: java.lang.Object にアクセスできません。 クラスファイル C:\Program Files (x86)\Java\jre7\lib\rt.jar(java/lang/Object.class) は不正です。 クラスファイルのバージョン 51.0 は不正です。48.0 であるべきです。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 public class index_jsp extends HttpJspBase { ^ エラー 1 個 at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:130) at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:293) at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:340) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:352) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:474) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:184) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534) ・・・・(続く)

    • ベストアンサー
    • Java
  • ファイルがダウンロードされるのですが。

    初歩的な問題だと思うのですが、 よろしくお願いいたします。 Apacheで自宅サーバーを構築しました。 当初は良好に稼動していたのですが、 拡張子が.pdfや.phpのファイルにアクセスすると 該当ファイルのダウンロード画面になってしまいます。 アドバイスくださると助かります。

    • ベストアンサー
    • PHP

専門家に質問してみよう