2016-06-21 12 views
1

retrofitでカスタムURLを使用してファイルをアップロードしようとしています。ここでAmazon S3への画像のアップロードRetrofit Failure:タイムアウト

RequestBody fileBody = RequestBody.create(MediaType.parse(artifactHeaders.getContentType()), file); 

インターフェースです:

@PUT 
Call<ResponseBody> uploadArtifactToAmazon2(@Url String artifactUrl, 
              @Header("Content-Disposition") String contentDisposition, 
              @Header("x-amz-server-side-encryption") String xAmzServerSideEncryption, 
              @Header("x-amz-security-token") String xAmzSecurityToken, 
              @Header("Content-Type") String contentType, 
              @Body RequestBody requestBody); 

しかし、私は私のログでこれを取得しています:後

06-21 10:41:16.354 4760-4808/ 
D/OkHttp: 4�IDATx�<�g�dYv��������j7��cvf�c�5XR����!�06-21 10:41:16.354 4760-4808/D/OkHttp: E�R($�B����"()��D��.�avfz�{zf�Ww�̪J��|/��"������|ޖ�9�?9���Ȧʰ��uv���V��� 
06-21 10:41:16.504 4760-4808/D/OkHttp: �R>a1�~�`.�>����IOhQS�a�B>��=h0 
    [- - - HUNDREDS OF THESE LINES CONTINUE ] 
06-21 10:41:16.567 4760-4808/D/OkHttp: Content-Type: image/png 
06-21 10:41:16.567 4760-4808/D/OkHttp: Content-Length: 669719 

ここ

は私がrequestBodyを作ってるんだ方法です数秒でログに記録されます:

06-21 10:41:16.626 4760-4808/D/!!!: Cookie Name: __cfduid Cookie Value: df052a1723cd06647966e629e113d4a461466515894 Expiry: Wed, 21-Jun-2017 14:41:14 GMT+00:00 
06-21 10:41:28.040 4760-4808/D/!!!: Cookie Name: __cfduid Cookie Value: df052a1723cd06647966e629e113d4a461466515894 Expiry: Wed, 21-Jun-2017 14:41:26 GMT+00:00 
06-21 10:41:39.014 4760-4760/D/!!!: Failure Code: timeout 

イメージを戻していますか?どうしましたか?

+1

ロギングコードの一部を表示して、その行のソースを確認できますか?また、私はサイドノートに...私はS3にアップデートするためにAWS android libを使用することを強く推奨します...以前はRetrofitを使用してS3にファイルをアップロードしましたが、パフォーマンスには感心しませんでした。彼らのlibは最適化され、マルチパートを使用します。 – snkashis

+0

@snkashis AWS android libの使用を真剣に検討していますが、クレデンシャルを使用する必要があるのはREST APIからのもので、アプリにサイズを追加します。私はより多くのログを投稿します。 –

+0

私は同じ懸念を抱いていましたが、スピードの向上はそれを正当化するのに十分なほど重要でした(おそらくあなたのアップロードはそれほど大きくありません)。 REST APIは、転送マネージャが使用する認知資格情報を配信できます。 – snkashis

答えて

0

最後にこれを解決しました。 Retrofitのデフォルトは10秒です。タイムアウト(詳細はhereを参照)。

これは、改造部品のアップロードを中断または停止します。

私のログに表示されている文字(私はHttpLoggingInterceptor.Level.BODYを使用しています)。

httpClient.readTimeout(10, TimeUnit.MINUTES) 
      .connectTimeout(10, TimeUnit.MINUTES) 

私の次のタスクはどちらか、それはファイルのためにかかる時間を決定することになり、アップロードすると、タイムアウト時間を設定したり、正しくタイムアウトイベントを処理することを使用して:解決策は、タイムアウト時間を設定することです。

関連する問題