我的服务器正在为S3签名上传生成信息。当我将该信息传递给iOS时,它适用于小文件。有时它也适用于较大的那些,但它经常超时。我目前正在iOS 7上通过WIFI进行测试。它通常会在大约35%的文件上大约60%后超时,但有时它会完成,有时它会很快超时。
我的服务器生成以下信息,我将其作为表单部件传递给我的POST。 (我也尝试将其作为具有类似结果的参数):
以及网址。
以下是我生成上传的代码:
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。
此人似乎在上传到自己的服务器时遇到同样的问题: - 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 :(得分:0)
对于那些最终在此页面上的人。 pressigned URL可能有一个“expires”值,对于上传来说太短了。我在Taming the AWS framework to upload a large file to S3 for iOS处理了这个问题。寻找“创建零件上传请求”,它涵盖了设置该值。我设法以这种方式上传500Mb文件。
答案 1 :(得分:0)
在我看来,视频文件,mp4文件也是如此。 问题是我的视频文件很小(最多2-5MB)。
我正在使用AWSiOSSD 2.5.2,iPhone 6s 7和7plus以及10+版本(包括最新版本)。
到目前为止还没有解决方法,包括6个月前发布的otusweb在这个主题上的答案。