使用AFNetworking在iOS上上传大文件 - 错误请求超时

时间:2013-10-18 10:54:57

标签: ios file-upload afnetworking

我正面临下一个问题。 在我的项目中,我正在使用AFNetworking进行所有网络操作。其中一个是将视频上传到服务器。 然后我试图上传大视频(约100 Mb),我收到请求超时错误。

  

错误域= NSURLErrorDomain代码= -1001“请求超时。”   的UserInfo = 0x15641b30
  {NSErrorFailingURLStringKey = http://server.name/path,   NSErrorFailingURLKey = http://server.name/path,   NSLocalizedDescription =请求超时。,   NSUnderlyingError = 0x16f7a000“请求超时。”}

现在我正在使用AFNetworking v1.3.3,我不能使用v2.0,因为需要iOS5支持。

刚刚开始上传时,上传进度看起来很好(我通过UploadProgressBlock看到它)。但是在几兆字节之后,上传开始变慢,之后就停止了。 SpeedTest为我上传5Mbps,下载5Mbps。

通过网络浏览器上传视频工作正常,所以我认为这不是服务器问题。

这是我的代码:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL: 
            [NSURL URLWithString:@"http://server.name/"]];
NSString *appid = [[self class] sharedProvider].ApplicationId;

ALAssetRepresentation *representaion =
             [videoData.videoAsset defaultRepresentation];
NSURL *url =
 [BRDataProvider getVideoAssetURLForTempFileWithAsset:
                                 videoData.videoAsset];

AFHTTPRequestOperation *operation;

if (url) {
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" 
    path:@"some/path" parameters:nil

constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

  NSData *hdnADCID = [appid dataUsingEncoding:NSUTF8StringEncoding];
     [formData appendPartWithFormData:hdnADCID name:@"hdnADCID"];
    NSData *txtTitle =
         [videoData.title dataUsingEncoding:NSUTF8StringEncoding];

 [formData appendPartWithFormData:txtTitle name:@"txtTitle"];

      NSData *txtDescription =
             [videoData.description dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:txtDescription name:@"txtDescription"];

  NSData *txtKeywords =
       [videoData.tags dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:txtKeywords name:@"txtKeywords"];
       [formData
     appendPartWithFileURL:url name:representaion.filename error:nil];
 }];
[request setTimeoutInterval:600];
operation = [fliqzClient HTTPRequestOperationWithRequest:request
   success:^(AFHTTPRequestOperation *operation, id responseObject) {

  [[NSFileManager defaultManager] removeItemAtURL:url error:nil];

   NSString *assetID = [operation.responseString
 stringByReplacingOccurrencesOfString:@"&\r\n" withString:@""];
       assetID = [assetID stringByReplacingOccurrencesOfString:@"id=
                           " withString:@""];
       videoData.assetId = assetID;
       [BRDataProvider registerVideoWithInfo:videoData completion:^(id result,
              NSError *error) {
          block(result,error);
           }];
         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

               NSLog(@"error - %@", error);

                block(nil,error);
    [[NSFileManager defaultManager] removeItemAtURL:url error:nil];
                                                 }];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten,
long long totalBytesWritten, long long totalBytesExpectedToWrite) {
   NSLog(@"bytesWritten - %d, totalBytesWritten - %lld,
     totalBytesExpectedToWrite - %lld", bytesWritten,
           totalBytesWritten, totalBytesExpectedToWrite);
}];
[client enqueueHTTPRequestOperation:operation];
} else {
NSError *error = [NSError errorWithDomain:kBRErrorDomainOwnDomain
                                     code:0



 userInfo:@{NSLocalizedDescriptionKey:kPreprocessingErrorUploadVideoMessage}];
    block(nil, error);
    }

也许有人知道如何修复它? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

我遇到与AFNetworking类似的问题:NSURLErrorDomain Code = -1001“请求已超时”。 从外部服务器检索并且设备在子网上连接到连接到WAN的路由器时,请求完美运行(192.168.1.0 subnet-1 - &gt; WAN)。但是,如果连接到连接到WAN的路由器的子网,请求将失败并显示上述消息 (192.168.0.0 subnet-2 - &gt; 192.168.1.0 subnet-1 - &gt; WAN)。所有浏览器操作都通过子网2正常工作,AFNetworking似乎连接但收到超时。我怀疑问题在于子网2路由器的配置。