2017-08-07 336 views
0

我使用okhttp將文件上傳到我的服務器,並將文件加載到Google文檔查看器中供我的用戶預覽。但是,由於我無法在服務器上找到文件,因此上傳失敗。引發的異常提供以下堆棧跟蹤:java.net.SocketException:連接重置OKHTTP

Cannot setInForeground() - never saw a connection for the pid: 22551 
08-08 04:23:37.208 22551-22605/ W/System.err: java.net.SocketException: Connection reset 
08-08 04:23:37.330 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551 
08-08 04:23:37.331 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551 
08-08 04:23:39.213 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551 
08-08 04:23:40.672 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551 
08-08 04:23:41.203 22551-22551/ W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 22551 
08-08 04:23:52.103 2751-3347/? D/WifiQualifiedNetworkSelector:: Current connection state (true,false,false) 
08-08 04:24:04.811 4124-4124/? W/GmsClientEvents: unregisterConnectionCallbacks(): listener [email protected] not found 

PORT 80也是開放的。但是,有時上傳失敗一致。大多數時候它工作正常。這是服務器端還是客戶端問題?如果客戶端是它的原因,它是如何工作的某些時候。超時錯誤是問題的原因嗎?我檢查了大或小的文件,但我不知道是什麼導致了這個問題。

這是我上傳的文件代碼:在計算器其他問題討論

try { 
     File f = new File(selectedFilePath); 

     String file_path = f.getAbsolutePath(); 
     OkHttpClient client = new OkHttpClient(); 

     RequestBody file_body = RequestBody.create(MediaType.parse(content_type),f); 
     Log.e("msh", content_type); 
     RequestBody request_body = new MultipartBody.Builder() 
       .setType(MultipartBody.FORM) 
       .addFormDataPart("type",content_type) 
       .addFormDataPart("uploaded_file",file_path.substring(file_path.lastIndexOf("/")+1), file_body) 
       .build(); 

     Request request = new Request.Builder() 
       .url("http://fakeurl.com/retrofit_example/save_file.php?neran="+neran) 
       .post(request_body) 
       .build(); 



      response = client.newCall(request).execute(); //exception is here 



     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
      /*uploadFile(selectedFilePath);*/ 
      upsuccess = false; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      upsuccess = false; 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
      /*uploadFile(selectedFilePath);*/ 
      upsuccess = false; 
     } 

     if(response!=null) { 
      if (response.isSuccessful()) { 
       upsuccess = true; 
      } 
      response.body().close(); 
     } 

我已經試過一切,但錯誤依然存在。雖然上傳失敗okhttp但其他方法和庫也有上述問題。

其他答案還建議:

  1. 增加上傳文件大小:我的文件僅僅是55 kb和限制是512 MB
  2. PHP日誌不顯示上傳任何失敗

UPDATE:我不完全確定,但這個問題通常發生在WIFI有時不與移動互聯網。此外,我注意到有時關閉wifi然後打開似乎解決了問題,但截至目前由於各種原因,我不想在我的應用程序上編程執行此操作,因爲我需要額外的權限。任何人都可以告訴我這是什麼原因?

回答

0

我之前遇到過這樣的問題,當我用okhttp上傳一個大文件到服務器時,它發生了異常「sendto failed:ECONNRESET(連接重置由對等)」,它困擾了我好幾天,最後我找到了答案。

nginx服務器的配置限制了上傳文件的大小。 找到文件「nginx.conf」,修改「client_max_body_size」爲512M或更大,然後一切正常。

對不起,我可憐的英語,希望這會幫助你。

相關問題