2017-08-07 6 views
0

Ich verwende okhttp zum Hochladen von Datei auf meinem Server und Laden der Datei in Google Docs Viewer für die Vorschau für meine Benutzer. Der Upload schlägt jedoch manchmal fehl, da ich die Datei auf dem Server nicht finden kann. Die Ausnahme ausgelöst ergibt den folgenden Stacktrace:java.net.SocketException: Verbindung zurückgesetzt 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 

Die PORT 80 ist ebenfalls geöffnet. Manchmal schlägt der Upload jedoch regelmäßig fehl. Die meiste Zeit funktioniert es gut. Ist es ein Problem auf der Server- oder Client-Seite? Wenn Client-Seite der Grund war, wie funktioniert es bestimmte Zeiten. Ist der Timeout-Fehler die Ursache des Problems? Ich überprüfte mit großen oder kleinen Dateien, aber ich weiß nicht, was das Problem verursacht.

Hier ist mein Code für das Hochladen der Datei:

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(); 
     } 

Ich habe versucht, alles in anderen Fragen auf Stackoverflow diskutiert, aber der Fehler bestehen bleibt. Obwohl das Hochladen mit okhttp fehlschlägt, haben auch andere Methoden und Bibliotheken das obige Problem.

Andere Antworten auch vorgeschlagen:

  1. erhöhen Upload Dateigröße: meine Datei nur 55 kb ist und Grenze ist 512 MB
  2. PHP log zeigt nichts für den Upload

schlägt fehl UPDATE: Ich bin mir nicht ganz sicher, aber dieses Problem tritt in der Regel mit WIFI manchmal nicht mit Mobile Internet auf. Ich habe auch bemerkt, dass ich manchmal Wlan ausschalten kann, und dann scheint es das Problem zu lösen, aber ab sofort möchte ich das aus verschiedenen Gründen nicht programmatisch machen, weil ich zusätzliche Berechtigungen benötige. Kann mir jemand sagen, was der Grund für das Problem sein kann?

Antwort

0

Ich habe die Frage genau so vor, als ich eine große Datei auf den Server mit okhttp hochladen, tritt die Ausnahme "sendto fehlgeschlagen: ECONNRESET (Verbindung von Peer zurückgesetzt)". Es beunruhigte mich für mehrere Tage, endlich Ich habe die Antwort gefunden.

Es war die Konfiguration des Nginx-Servers, die die Upload-Dateigröße begrenzt. Suchen Sie die Datei "nginx.conf", ändern Sie "client_max_body_size" auf 512M oder größer, dann ist alles in Ordnung.

Entschuldigung für mein schlechtes Englisch, hoffe, das würde Ihnen helfen.

Verwandte Themen