2011-11-22 10 views
12

アンドロイドモバイルでHttpClientによってサーバーに写真をアップロードしようとしましたが、このエラーが発生することがあります。誰もそれを解決する方法を知っていますか?HttpPostが失敗しました。「再現不可能なリクエストエンティティでリクエストを再試行できません」

私のコードのように:

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 
+0

こんにちは、お返事ありがとうございます。私はFileEntityを試してみましたが、問題はアップロードサーバーがFileEntityをサポートしていないことです。FileInputStreamを使用する必要があります。そして、あなたは最初の要求が失敗したと述べました、それはこの失敗の理由を知ることができますか? – user1059217

+3

'FileEntity'が奇妙に聞こえるのをサポートしていません。簡単な修正をするには、BufferedHttpEntity内でエンティティをラップすることをお試しください。これにより反復可能になりますが、少しメモリが増えます。 – Jens

答えて

6

これは、最初の要求が失敗したこと、そして、それはそれができる流れだからそれを繰り返す。

FileInputStreamを削除し、代わりにFileEntityを使用した場合、再現可能と思われます。

また、長さを設定する必要はありません。

2

この質問にお答えするのは少し遅れる場合がありますが、このページに掲載されたユーザーの場合、例外の理由はBasicHttpEntityであり、繰り返し可能なリクエストは許可されません。適切なHttpEntity実装を使用する必要があります。

この質問の場合は、他の答えでMatthew Flaschenが述べたようにFileEntityとなりますが、ほとんどの場合、反復可能な要求を可能にするStringEntityを使用できます。

関連する問題