我试图通过HttpClient在
Android手机中将照片上传到服务器,但有时我会收到这个错误,它不会总是发生.有谁知道如何解决呢?
我的代码如下:
HttpClient client =new DefaultHttpClient(); HttpPut httpPut = new HttpPut(uploadUrl); InputStream in =null; HttpResponse response =null; try { in = new FileInputStream(filepath); BasicHttpEntity entity = new BasicHttpEntity(); entity.setContent(in); entity.setContentLength(new File(basepath+path).length()); httpPut.setEntity(entity); response = client.execute(httpPut); System.out.println(response.getStatusLine()); consume(response.getEntity()); }
…….
错误信息:
11-22 10:32:50.370: W/System.err(15224): org.apache.http.client.ClientProtocolException 11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) 11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 11-22 10:32:50.370: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 11-22 10:32:50.370: W/System.err(15224): at com.hp.nimbus.android.skydrive.util.SkyDriveUtils_Rest.doUploadPhoto(SkyDriveUtils_Rest.java:203) 11-22 10:32:50.380: W/System.err(15224): at com.hp.nimbus.android.skydrive.util.SkyDriveUtils_Rest.uploadPhoto(SkyDriveUtils_Rest.java:250) 11-22 10:32:50.380: W/System.err(15224): at com.hp.nimbus.android.skydrive.FolderMonitorService$1.onEvent(FolderMonitorService.java:36) 11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125) 11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.observe(Native Method) 11-22 10:32:50.380: W/System.err(15224): at android.os.FileObserver$ObserverThread.run(FileObserver.java:88) 11-22 10:32:50.380: W/System.err(15224): Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity 11-22 10:32:50.380: W/System.err(15224): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:419) 11-22 10:32:50.380: W/System.err(15224): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 11-22 10:32:50.390: W/System.err(15224): ... 8 more
解决方法
这意味着初始请求失败,并且因为它是一个流,它不能重复.
如果您删除FileInputStream,而是使用FileEntity
,我相信它将是可重复的.
你也不必设置长度.