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