2013-12-12 5 views
4

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

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

  • AWSAccessKeyId
  • Content-Type
  • 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."} 

UPDATE:

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

Этот человек, кажется, имеют те же проблемы загрузки на своем собственном сервере: - Uploading large files on iOS with AFNetworking - error Request Timeout

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

Uploading to Amazon-S3 via AFNetworking

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

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

+0

Привет @Bjorn Roche У меня такая же проблема с загрузкой видеофайлов. Вы решили свою проблему? Если бы вы могли опубликовать свои решения? – Shamsiddin

+0

Я работал над этим, используя меньшие файлы, и это то, что мне сейчас нужно делать. Если проблема вернется, я могу переключиться на загрузку на сервер и использовать сервер для передачи на S3, вместо того, чтобы пытаться напрямую загружать s3, поскольку он, похоже, не работает за несколько мегабайт :( –

ответ

0

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

-1

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

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

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