Тайм-аут POSTING для S3 из iOS с использованием подписанных URL-адресов

Мой сервер генерирует информацию для подписанной загрузки на S3. Когда я передаю эту информацию в iOS, она работает для небольших файлов. Иногда это работает и для более крупных, но часто выходит из строя. В настоящее время я тестирую на iOS 7 поверх WIFI. Обычно время ожидания файла примерно 35 МБ составляет примерно 60%, но иногда оно завершается, а иногда - раньше.

Мой сервер генерирует следующую информацию, которую я передаю как части формы в мой POST. (Я также попробовал это как параметры с похожими результатами):

  • AWSAccessKeyId
  • Тип содержимого
  • acl (установлен в приват)
  • ведро
  • ключ
  • политика
  • подпись
  • success_action_redirect

а также URL.

Вот мой код, который генерирует загрузку:

AFHTTPRequestOperation *op = [manager POST:url
                                parameters:nil
                 constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
          {
              if( throttle )
                  [formData throttleBandwidthWithPacketSize:kAFUploadStream3GSuggestedPacketSize delay:kAFUploadStream3GSuggestedDelay];
              for( id key in parameters ) {
                  NSString *val = parameters[key];                      
                  [formData appendPartWithFormData:[val dataUsingEncoding:NSUTF8StringEncoding] name:key];
              }
              NSError *error;
              if( ![formData appendPartWithFileURL:videoUrl name:@"file" fileName:@"movie.mov" mimeType:@"video/quicktime" error:&error] ) {
                  // handle the error
              }

          } success:^(AFHTTPRequestOperation *operation, id responseObject) {
              //success
          }
               failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                   if( error.code == -1021 && !throttle ) {
                       //try again with throttle:

                   }
                   NSLog(@"Error: %@", error);
                   // handle error
               }];

Это приводит к следующей ошибке:

Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x1aa15130 {NSErrorFailingURLStringKey=XXX, NSErrorFailingURLKey=XXX, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x1ab94290 "The request timed out."}

ОБНОВИТЬ:

Есть несколько похожих вопросов по SO, которые я должен упомянуть. У многих людей возникают проблемы с таймаутами Heroku, но я загружаю их прямо на S3.

У этого человека, похоже, возникла та же проблема с загрузкой на его собственный сервер: - Загрузка больших файлов на iOS с помощью AFNetworking - Ошибка времени ожидания запроса

Этот вопрос выглядит как похожая проблема с использованием библиотеки AWS, но они не предоставляют никакого кода:

Загрузка в Amazon-S3 через AFNetworking

Эта проблема кажется связанной, но, глядя на источник, кажется, что длина принимается во внимание при публикации файла:

https://github.com/AFNetworking/AFNetworking/issues/1510

2 ответа

Для тех, кто в конечном итоге на этой странице. URL-адрес с печатью, вероятно, имел значение "expires", которое слишком короткое для загрузки. Я коснулся этого в разделе "Укрощение инфраструктуры AWS", чтобы загрузить большой файл на S3 для iOS. Ищите "СОЗДАТЬ ЗАПРОСЫ ЗАГРУЗКИ ЧАСТЕЙ", оно охватывает настройку этого значения. Мне удалось загрузить файл 500 Мб таким образом.

Это происходит со мной и в видеофайлах, в mp4-файлах. Дело в том, что мои видеофайлы маленькие (максимум 2-5МБ).

Я использую AWSiOSSD 2.5.2, iPhone 6s 7 и 7plus с версиями 10+ (включая последнюю версию).

Пока обходных путей не было, включая ответ otusweb, опубликованный 6 месяцев назад в этой теме.

Другие вопросы по тегам