超时使用签名的URL从iOS发布到S3

我的服务器正在生成一个签名上传到S3的信息。 当我将这些信息传递给iOS时,它适用于小文件。 有时它也适用于更大的,但它往往超时。 我目前正在通过WIFI在iOS 7上进行testing。 在大约35 MB的文件上,大约60%的文件会超时,但是有时会完成,有时甚至超时。

我的服务器生成以下信息,我作为表单部件传递给我的POST。 (我也试过它作为具有类似结果的参数):

  • AWSAccessKeyId
  • 内容types
  • 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."} 

更新:

我应该提到几个类似的问题。 Heroku超时有很多人有问题,但我直接上传到S3。

这个人似乎有同样的问题上传到他自己的服务器: – 在iOS上用AFNetworking上传大文件 – 错误请求超时

这个问题看起来像使用AWS库的类似问题,但它们不提供任何代码:

通过AFNetworking上传到Amazon-S3

这个问题似乎是相关的,但从源头上看,发布文件时似乎考虑了长度:

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

对于那些最终在这个页面上。 签名的URL可能有一个“expires”值,对于上传来说太短了。 我在驯服AWS框架上触摸这个上传一个大文件到iOS的S3 。 查找“创build零件的上传请求”,它涵盖设置该值。 我设法以这种方式上传500Mb文件。

它发生在我的video文件以及MP4文件。 问题是我的video文件很小(最大2-5MB)。

我正在使用AWOSOSSD 2.5.2,版本10+(包括最新的版本)的iPhone 6s 7和7plus。

目前没有解决方法,包括otusweb回答6个月前在这个线程上发布。