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

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

Мой сервер генерирует следующую информацию, которую я передаю как части формы в свой 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.

Кажется, у этого человека такая же проблема с загрузкой на свой сервер: timeout">Загрузка больших файлов на iOS с помощью AFNetworking — ошибка Время ожидания запроса

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

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

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

https://github.com/AFNetworking/AFNetworking/issues/1510#issuecomment-29687300


person Bjorn Roche    schedule 12.12.2013    source источник
comment
Привет @Bjorn Roche У меня такая же проблема с загрузкой видеофайлов. Вы решили свою проблему? Если да, не могли бы вы опубликовать свое решение, пожалуйста?   -  person Shamsiddin    schedule 03.07.2014
comment
Я работал над этим, используя файлы меньшего размера, что мне все равно нужно сделать сейчас. Если проблема вернется, я могу переключиться на загрузку на сервер и использовать сервер для передачи на S3, а не пытаться загружать напрямую на s3, поскольку, похоже, она не работает после нескольких мегабайт :(   -  person Bjorn Roche    schedule 04.07.2014


Ответы (2)


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

person otusweb    schedule 11.11.2016

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

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

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

person Ariel Nitzan    schedule 10.04.2017