次の問題に直面しています。私のプロジェクトでは、すべてのネットワーク操作に AFNetworking を使用しています。それらの 1 つは、ビデオをサーバーにアップロードすることです。次に、大きなビデオ (約 100 Mb) をアップロードしようとすると、リクエストのタイムアウト エラーが発生します。
エラー Domain=NSURLErrorDomain Code=-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 を提供します。
Web ブラウザからの動画のアップロードは正常に機能しているため、サーバーの問題ではないと思います。
これが私のコードです:
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);
}
多分誰かがそれを修正する方法を知っていますか?ご協力いただきありがとうございます!