从 URL 下载文件并将其放在 iPhone 的 Resource 文件夹中

Posted

技术标签:

【中文标题】从 URL 下载文件并将其放在 iPhone 的 Resource 文件夹中【英文标题】:Download file from URL and place it in Resource folder in iPhone 【发布时间】:2012-07-19 05:57:48 【问题描述】:

我是 iPhone 开发者的新手,

如何从url 下载 epub 文件并将其存储在 Resource 文件夹中?

这是我的代码 sn-p,

- (void)viewDidLoad

    [super viewDidLoad];
    fileData = [NSMutableData data];
    NSString *file = [NSString stringWithFormat:@"http://www.google.co.in/url?sa=t&rct=j&q=sample%20epub%20filetype%3Aepub&source=web&cd=2&ved=0CFMQFjAB&url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F1177388%2Fflagship_july_4_2010_flying_island_press.epub&ei=i5gHUIOWJI3RrQeGro3YAg&usg=AFQjCNFPKsV-tieF4vKv7BXYmS-QEvd7Uw"];
    NSURL *fileURL = [NSURL URLWithString:file];

    NSURLRequest *req = [NSURLRequest requestWithURL:fileURL];
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

    [self.fileData setLength:0];


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

    [self.fileData appendData:data];        


- (void)connectionDidFinishLoading:(NSURLConnection *)connection

    NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,    NSUserDomainMask, YES);
    NSLog(@"%@", [dirArray objectAtIndex:0]);

    NSString *path = [NSString stringWithFormat:@"%@", [dirArray objectAtIndex:0]];

    if ([self.fileData writeToFile:path options:NSAtomicWrite error:nil] == NO) 
        NSLog(@"writeToFile error");
    
    else 
        NSLog(@"Written!");
    

我在NSLog 中看不到任何内容。

【问题讨论】:

请提供更多信息,例如... 您在收到的数据中得到了什么吗?请从参数中启用 Zombie,它将为您提供有关崩溃的更多信息 connectionDidFinishLoading:的第一行下个断点,看看哪里崩溃了? 我的应用程序没有崩溃,请参阅我的编辑,我在connectionDidFinishLoading: 上保留了断点,但它没有被调用。 【参考方案1】:

在写入时创建文件路径也存在问题。您没有在路径中指定任何文件名。在下面的行中,我使用文件名作为“filename.txt”。给一个合适的名字,它会写。

NSString *path = [NSString stringWithFormat:@"%@/filename.txt", [dirArray objectAtIndex:0]];

创建 URL 也有问题。这样做,

NSString *file = [NSString stringWithString:@"http://www.google.co.in/url?sa=t&rct=j&q=sample%20epub%20filetype%3Aepub&source=web&cd=2&ved=0CFMQFjAB&url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F1177388%2Fflagship_july_4_2010_flying_island_press.epub&ei=i5gHUIOWJI3RrQeGro3YAg&usg=AFQjCNFPKsV-tieF4vKv7BXYmS-QEvd7Uw"];
     NSURL *fileURL = [NSURL URLWithString:file];

您已使用以下行创建了文件数据。

fileData = [NSMutableData data];

如下图,

fileData = [[NSMutableData alloc]init];

self.fileData = [NSMutableData data];

ios 在调用连接委托之前释放文件数据。

【讨论】:

我试过你的答案,它不起作用,我实现了-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error NSLog(@"ERROR with theConenction %@",error); 我的日志显示bad url 查看编辑后的答案。您应该使用 stringWithString 而不是字符串 WithFormat 创建 URL。 现在委托被调用,我可以看到我的日志结果,它显示writeToFile error 老兄,当我使用这个网址http://wordpress.org/extend/plugins/about/readme.txt 和写这个- (void)connectionDidFinishLoading:(NSURLConnection *)connection NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSLog(@"%@", [dirArray objectAtIndex:0]); NSString *path = [NSString stringWithFormat:@"%@/abc.txt", [dirArray objectAtIndex:0]]; if ([self.fileData writeToFile:path options:NSAtomicWrite error:nil] == NO) NSLog(@"writeToFile error"); else NSLog(@"Written!"); 时,我很困惑 然后我可以看到带有内容的 abc.txt 文件。 其实我想要的是,从url下载.epub文件,放到iPhone模拟器路径中。

以上是关于从 URL 下载文件并将其放在 iPhone 的 Resource 文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

无法即时生成 ZIP 文件并将其发送到用户的浏览器以供下载

如何从 URL 下载文件并将其保存在 Rails 中?

如何从 Flutter 中的 URL 下载文件并将其保存在 iOS 共享文件夹中?

从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js

如何从 URL 下载图像并将其动态存储在我的应用程序的可绘制文件夹中?

从网络加载图像并将其显示在集合视图中