Мой сервер генерирует информацию для подписанной загрузки на 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
Привет @Bjorn Roche У меня такая же проблема с загрузкой видеофайлов. Вы решили свою проблему? Если бы вы могли опубликовать свои решения? – Shamsiddin
Я работал над этим, используя меньшие файлы, и это то, что мне сейчас нужно делать. Если проблема вернется, я могу переключиться на загрузку на сервер и использовать сервер для передачи на S3, вместо того, чтобы пытаться напрямую загружать s3, поскольку он, похоже, не работает за несколько мегабайт :( –