2

ファイルへの URL アドレスを指定する iPhone プログラムのメソッドを作成しようとすると、iOS アプリのドキュメント ディレクトリにダウンロードされます。

AFNetowrking のドキュメントに従うと、ファイル名が常にゴミであることを除けば、問題なく動作するようです。

プロジェクトに AFNetworking 2.0 を追加した Xcode 5 を使用しています。これが私がこれまでに持っているコードです:

//#import "AFURLSessionManager.h"

//On load (or wherever):
[self downloadFile:@"http://www.irs.gov/pub/irs-pdf/fw4.pdf"];

-(void)downloadFile:(NSString *)UrlAddress
{ NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURL *URL = [NSURL URLWithString:UrlAddress];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) 
{
    NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];
    return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];
} 
completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) 
{
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
}

最終的に、ファイルはドキュメント ディレクトリに正常にダウンロードされますが、名前が文字化けしています。

ファイルのダウンロード先: file:///Users/myname/Library/Application%20Support/iPhone%20Simulator/7.0/Applications/25188DCA-4277-488E-B08A-4BEC83E59194/Documents/CFNetworkDownload_60NWIf.tmp

私が期待している最終結果:

ダウンロードしたファイル: file:///Users/myname/Library/Application%20Support/iPhone%20Simulator/7.0/Applications/25188DCA-4277-488E-B08A-4BEC83E59194/Documents/fw4.pdf

プロジェクトに AFNetworking を追加するために cocoapods を使用しました: pod 'AFNetworking', "~> 2.0"

最後に、ダウンロードの進行状況を取得するにはどうすればよいですか?

4

2 に答える 2

5

これが私が作成できた答えです:

-(void)downloadFile:(NSString *)UrlAddress
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:UrlAddress]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *pdfName = @"The_PDF_Name_I_Want.pdf";

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:pdfName];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

    NSLog(@"Download = %f", (float)totalBytesRead / totalBytesExpectedToRead);

}];
[operation start];
}

私は改善や提案を受け入れています:)

于 2013-10-11T14:16:56.090 に答える
0

この行を置き換えるだけです:

return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];

と:

return [documentsDirectoryPath URLByAppendingPathComponent:@"fw4.pdf"];

CFNetworkDownload_60NWIf.tmp[targetPath lastPathComponent]のようなものを返すので

于 2013-10-23T22:04:04.600 に答える