从 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 文件夹中的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Flutter 中的 URL 下载文件并将其保存在 iOS 共享文件夹中?
从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js