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:
- erhöhen Upload Dateigröße: meine Datei nur 55 kb ist und Grenze ist 512 MB
- 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?