私のアプリでは、ユーザーはビデオを録画したりフォトアルバムからビデオを選択したり、PHPスクリプトを使ってビデオファイルをサーバーにアップロードすることができます。ファイルをサーバーにアップロードするには、AFNetworkingを使用しています。私はもともとフォトアルバムからビデオをアップロードしようとしましたが、動作させることができなかったので、メインバンドルにビデオを追加しました。iOS 5 - AFNetworking - アップロードビデオ
コードは次のとおりです。私は、HTMLフォーム経由で同じ動画をアップロードすることができる午前として
NSString *vidURL = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mov"];
NSData *videoData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:vidURL]];
NSLog(@"The test vid's url is %@.",vidURL);
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL fileURLWithPath: @"http://www.mywebsite.com"]];
NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload.php" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData)
{
[formData appendPartWithFileData:videoData name:@"file" fileName:@"test.mov" mimeType:@"video/quicktime"];
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setUploadProgressBlock:^(NSInteger bytesWritten,long long totalBytesWritten,long long totalBytesExpectedToWrite)
{
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation start];
私のPHPスクリプトが正常に実行します。しかし、上記のコードはsetUploadProgressBlockに到達できません。
誰かに壊れてしまったり、何か他のものがありますか?
ありがとうございます。
興味があるだけ[ httpClient enqueueHTTPRequestOperation:operation]を[operation start]経由で実行しますか?ほとんどのAFNetworkingの呼び出しは[操作開始]です。また、操作のレスポンスにnull戻り値を取得しています。 – Will
大丈夫、[操作の開始]も動作するはずですが、なぜAFHTTPClientのNSOperationQueueを使用しないのですか?これにより、要求の実行が自動的にスケジューリングされ、並行操作に適しています。両方を行うことは誤りであることに注意してください。 – Felix