2016-06-21 1 views
1

Я пытаюсь загрузить файл с использованием настраиваемого URL-адреса в модификации.Загрузка изображения на Amazon s3 Отказоустойчивость: тайм-аут

Вот как я делает requestBody:

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 

После того, через пару секунд журнал дает мне следующее:

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

Можете ли вы показать нам некоторые из вашего кода ведения журнала, чтобы мы могли видеть источник этих строк? И я на стороне примечания. Я бы очень рекомендовал использовать AWS android lib для обновления до S3 ... Я ранее использовал Retrofit для загрузки файлов на S3 тоже, но не был впечатлен производительностью. Их lib оптимизирован и использует multipart без необходимости настраивать его самостоятельно. – snkashis

+0

@snkashis Я серьезно рассматриваю возможность использования AWS android lib, однако учетные данные должны использовать его, исходя из нашего REST API, и он добавит больше размера в приложение. Я опубликую больше журналов. –

+0

У меня были некоторые из тех же проблем, однако увеличение скорости было достаточно значительным, чтобы оправдать его (возможно, ваши загрузки не такие большие). Ваш REST api может предоставлять учетные данные cognito, используемые менеджером передачи. – snkashis

ответ

0

Окончательно решил это. Оказывается, что Retrofit имеет значение по умолчанию 10 секунд. тайм-аут (см. подробности here).

Это прерывает или приостанавливает загрузку на предмет модификации.

Персонажи, которые я вижу в своем журнале (я использую HttpLoggingInterceptor.Level.BODY). Решение состоит в том, чтобы установить длительность задержки:

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

Моя следующая задача будет либо определить, сколько времени потребуется для файла, который будет закачанный и с помощью, чтобы установить длительность тайм-аута или правильно обработать событие тайм-аута.

 Смежные вопросы

  • Нет связанных вопросов^_^