私はObjective-cが初めてで、トークンを含むURLリクエストをサーバーに送信してファイルをダウンロードしたいと考えています。トークンが無効な場合、サーバーは HTTP 500 エラーを返します。
しかし、操作がエラーを返しても、ファイルはまだ作成されていますが、ファイルの内容はエラーメッセージです。私の期待は、操作がエラーになった場合、ファイルを作成してダウンロードするべきではありません。説明が下手でごめんなさい...
以下は私のコードです。
- (void)attemptResourceFileWithToken:(NSString*)token
from:(NSString*)url
to:(NSString*)targetPath
completionHandler:(void (^)(NSError*))handler {
//create an NSURL object, which is used to make an NSURLRequest.
NSString *string = [NSString stringWithFormat:@"%@&token=%@", url, token];
NSURL *requestUrl = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:requestUrl];
DLog(@"Request URL: %@", requestUrl);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setOutputStream:[NSOutputStream outputStreamToFileAtPath:targetPath append:NO]];
DLog(@"Target file path: %@", targetPath);
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
DLog(@"Successfully get the response from server");
handler(nil);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
DLog(@"ERR: %@", [error description]);
handler(error);
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
DLog(@"Downloading %ld of %lld bytes", (long) totalBytesRead, totalBytesExpectedToRead);
}];
[operation start];
}
- setOutputStream は、ファイルをターゲット パスに保存します。
- 操作が正常に完了した場合、ハンドラは nil を返します
- 操作が失敗した場合は、エラーを返します。
3 (操作が失敗) の場合、ステップ 1 setOutputSteam がキャンセルされるか、ファイルを保存しないようにするために私ができること。