2012-09-18 537 views
16

Stack Overflowに関する他の質問がこの質問に対処しましたが、提供された回答のどれもが私の問題に対処できませんでした。multipart/form-data要求の処理に失敗しました。 Read timed out

私は、Apache HTTP Commonsを使用しているアプレットから10KBから16MBの間のファイルをアップロードしようとしています。私のローカル環境ではすべてがうまく動作します。

私は、ファイルサイズに関係なく、唯一の私の本番サーバー(Tomcatの6.0、https://www.dailyrazor.com/)に次の例外を受けています:

org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed. Read timed out 
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:384) 
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:116) 
    at com.actura.helper.UploadHelper.processUpload(UploadHelper.java:92) 
    at com.actura.voice.upload.FileUploadServlet.process(FileUploadServlet.java:85) 
    at com.actura.voice.upload.FileUploadServlet.doPost(FileUploadServlet.java:75) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) 
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) 
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769) 
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698) 
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 
    at java.lang.Thread.run(Thread.java:662) 

これはコモンズIOのデバッグログです:

2012-Sep-18 11:26:28,446 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory constructor (listener) 
2012-Sep-18 11:26:28,794 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:26:28,800 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:26:28,800 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:26:28,802 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:26:28,803 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:26:28,804 [TP-Processor5] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
processing folder... /home/dixieh83/public_html/ActuraVoiceRecorderDemo/temp 
2012-Sep-18 11:27:47,062 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory constructor (listener) 
2012-Sep-18 11:27:47,461 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:27:47,461 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:27:47,462 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItemFactory 
    DEBUG inside MonitoredDiskFileItemFactory createItem 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside MonitoredDiskFileItem constructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG inside getOutputStream() 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG inside MonitoredOutputStream constructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredOutputStream 
    DEBUG leaving MonitoredOutputStream contructor 
2012-Sep-18 11:27:47,463 [TP-Processor4] com.actura.voice.upload.MonitoredDiskFileItem 
    DEBUG leaving getOutputStream() 

このアップロードの問題以外、私のアプレットは正常に動作します。私の運用サーバーのserver.xmlファイルに記載され

これは、サーバーの構成です:

<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector address="127.0.0.1" port="9609" enableLookups="false" protocol="AJP/1.3" connectionTimeout="30000" maxThreads="50" minSpareThreads="1" maxSpareThreads="3" disableUploadTimeout="true" /> 

私のインターネット接続の速度は、(ダウン2.01 Mbpsおよび0.42 Mbpsのアップ)で結構ですので、この例外は私の葉困惑した。私はすでにconnectionTimeOutを3000000に設定しましたが、私はまだ例外があります。無制限にするためにconnectionTimeOutを-1に設定する必要がありますか?

ファイルのアクセス許可は、私がアップロードしているディレクトリの777に設定されており、JDKバージョン7を使用してブラウザでアプレットを実行しています。

Javaコンソール出力:

Java Plug-in 10.7.2.10 
Using JRE version 1.7.0_07-b10 Java HotSpot(TM) Client VM 

アップロードが失敗したとき、私はコンソールでこれを取得する:

java.net.SocketException: Connection reset by peer: socket write error 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(Unknown Source) 
    at java.net.SocketOutputStream.write(Unknown Source) 
    at org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:169) 
    at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:119) 
    at org.apache.http.entity.mime.content.InputStreamBody.writeTo(InputStreamBody.java:70) 
    at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206) 
    at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224) 
    at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183) 
    at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:98) 
    at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:108) 
    at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:122) 
    at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:271) 
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.sendRequestEntity(ManagedClientConnectionImpl.java:197) 
    at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:257) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1066) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1044) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1035) 
    at com.actura.app.util.ApplicationUtil.uploadUsingApache(ApplicationUtil.java:143) 
    at com.actura.app.util.ApplicationUtil.saveWaveToServer(ApplicationUtil.java:90) 
    at com.actura.app.capture.RecorderUI.saveButtonActionPerformed(RecorderUI.java:1856) 
    at com.actura.app.capture.RecorderUI.access$17(RecorderUI.java:1824) 
    at com.actura.app.capture.RecorderUI$7.actionPerformed(RecorderUI.java:1325) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

私は、これは私のISPの問題であるかもしれないことを知るようになってきました。なぜ私はスムーズにtemviewerやSkypeのようなソフトウェアを使用することができるのiSPの問題ですか?私は、アプレットのGUI上のアップロードボタンを押すと

public static String uploadUsingApache(URL url, List<File> list, 
      String userId, String accountId, String waveDuration) 
      throws Exception { 

     // The execution: 
     DefaultHttpClient httpclient = new DefaultHttpClient(); 

     HttpPost method = new HttpPost(url.toString()); 

     MultipartEntity entity = new MultipartEntity(); 
     entity.addPart("userId", new StringBody(userId, Charset 
       .forName("UTF-8"))); 
     entity.addPart(IVR_ACCOUNT_KEY, new StringBody(accountId, Charset 
       .forName("UTF-8"))); 
     entity.addPart(IVR_MP3LEN_KEY, new StringBody(waveDuration, Charset 
       .forName("UTF-8"))); 

     // FileBody fileBody = new FileBody(list.get(0)); 
     // entity.addPart("file", fileBody); 

     for (File f : list) { 

      byte[] imageBytes = fileToByteArray(f); 
      entity.addPart("attachment_field", new InputStreamKnownSizeBody(
        new ByteArrayInputStream(imageBytes), imageBytes.length, 
        "audio/wav", f.getName())); 
      method.setEntity(entity); 
     } 

     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

     // HttpResponse response = httpclient.execute(method,responseHandler); 
     String responseText = httpclient.execute(method, responseHandler); 

     // error text 
     if (responseText.contains("<exception>")) { 
      responseText = responseText.replace("<exception>", ""); 
      responseText = responseText.replace("</exception>", ""); 
      throw new Exception(responseText); 
     } 

     // System.out.println(" Status " +response.getStatusLine()); 
     List<String> deleteList = Arrays.asList(responseText.split(",")); 

     StringBuffer sb = new StringBuffer(); 
     int cnt = 1; 
     for (File f : list) { 
      if (deleteList.contains(f.getName())) { 
       sb.append(f.getName() + (cnt == deleteList.size() ? "" : ", ")); 
       f.delete(); 
       cnt++; 
      } 

     } 

     if (deleteList.size() > 1) { 
      sb.append(" are "); 
     } else if (deleteList.size() == 1) { 
      sb.append(" is "); 
     } else { 

     } 

     sb.append(" successfully saved."); 

     return sb.toString(); 
    } 

、それはGUIがフリーズ法上、同時に呼び出します。

は、アップロードを実行するコードです。 10〜50秒後に、サーバーはFileUploadExceptionをスローします。サーブレットはアプレットに例外について通知しますが、アプレットは4〜5分間ハングしてからユーザーに例外を通知します。

サーバー側に何か問題があると、それほど時間がかかるのはなぜですか?

+1

すでに投稿されていると見なされています。特に、既に試したステップや、なぜあなたのために働いていないのか、環境がそのソリューションが機能していた環境とどのように異なるのかを詳しく説明します。 –

+0

ブラウザでアプレットを実行しているJavaのバージョンは何ですか?このアップロード機能以外のアプレットは読み込まれて正常に動作しますか? –

+0

はい私はJdk 7を使用してアプレットを実行しています。アプレットはこのアップロード機能以外は正常に動作します。アップロード速度に問題はありますか? – Mihir

答えて

27

これは多くの私を助けた:私のserver.xmlの基本的http://blog.somepixels.net/en/502-proxy-error-uploading-from-apache-mod_proxy-to-tomcat-7/

として、私はそれを設定する:あなたは」同様の質問(複数可)にリンクされている場合、それが参考になる

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" 
     connectionUploadTimeout="36000000" disableUploadTimeout="false" 
     connectionTimeout="60000" redirectPort="8443" /> 
+0

[connectionUploadTimeout]:データアップロードの進行中に使用するタイムアウトをミリ秒単位で指定します。これは、disableUploadTimeoutがfalseに設定されている場合にのみ有効です。 [disableUploadTimeout]:このフラグを使用すると、サーブレットコンテナは、データのアップロード時に通常は異なる接続タイムアウトを使用できます。指定しない場合、この属性はtrueに設定され、このより長いタイムアウトを無効にします。 [ソース]:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html –

4

実行中の設定(またはすでに試したもの)は問題ではありませんが、アップロード中にソケットのタイムアウトを超えてしまうという問題がほとんどあります。

関連するタイムアウトに達する前にファイルが完全に受信されなかったため、エラーがスローされます。これは、ローカルネットワーク上のテストで作業しているものと一貫していますが、はるかに遅いインターネット(特にアップロードの場合)では動作しません。

該当する<Connector>の定義については、server.xmlをご覧ください。 connectionTimeoutまたはconnectionUploadTimeoutのいずれかの属性(後者はdisableUploadTimeoutがtrueに設定されている場合)の値に関心があります。

さらに悪質な問題の証拠がない場合は、接続タイムアウトを増やすだけでこの問題を解決できると思います。

+0

これは、本番サーバーのserver.xmlからコピーされたxmlです。 <! - ポート8009のAJP 1.3コネクタの定義 - > Mihir

+0

私のインターネット速度は非常によく、プロダクションサーバーになると何が問題なのか分からないので、connectionTimeOutを-1それを無限にするために?? – Mihir

+0

私はspeedtest.comで自分のスピードをチェックしています。その結果、ダウンロード速度は2.01 mbpsで、アップロード速度は0.42 mbpsです。connectionTimeoutを3000000に設定しましたが、同じ例外があります。どうすればこれを取り除くことができますか? – Mihir

関連する問題