我的服务器正在生成签名上传到 S3 的信息。当我将该信息传递给 iOS 时,它适用于小文件。有时它也适用于更大的,但它经常超时。我目前正在通过 WIFI 在 iOS 7 上进行测试。对于大约 35 MB 的文件,它通常会在大约 60% 后超时,但有时它会完成,有时它会更快地超时。
我的服务器生成以下信息,我将其作为表单部分传递给我的 POST。(我也尝试将其作为具有类似结果的参数):
- AWSAccessKeyId
- 内容类型
- acl(设置为私有)
- 桶
- 钥匙
- 政策
- 签名
- 成功操作重定向
以及一个网址。
这是我生成上传的代码:
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."}
更新:
我应该提到几个类似的问题。很多人都遇到 Heroku 超时问题,但我直接上传到 S3。
这个人在上传到他自己的服务器时似乎遇到了同样的问题: -在 iOS 上使用 AFNetworking 上传大文件 - 错误请求超时
这个问题看起来像使用 AWS 库的类似问题,但它们不提供任何代码:
这个问题似乎是相关的,但是查看源代码,似乎在发布文件时考虑了长度:
https://github.com/AFNetworking/AFNetworking/issues/1510#issuecomment-29687300