我正在尝试将图像从webURL下载并存储到文档目录。
这是我的代码。
-(void)downloadPersonPhoto:(NSDictionary *)dict
{
NSString *imageUrlStr=[dict objectForKey:@"personPhoto"];
if ([[dict valueForKey:@"personAvatarStore"] isEqualToString:@"AMAZON"])
{
imageUrlStr = [imageUrlStr stringByReplacingOccurrencesOfString:@"original" withString:@"100x100"];
}
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentsDirectory = [self getDocumentDirectory];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"personPhoto"];
if (![fileManager fileExistsAtPath:dataPath]) {
[fileManager createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; //Create folder
}
NSString *fullPath = [dataPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",[dict valueForKey:@"personId"]]];
if (![fileManager fileExistsAtPath:fullPath]) {
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrlStr]];
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
NSLog(@"Avatar Photo stored at: %@", fullPath);
}
}
每次“阿凡达照片存储在......:”都要在控制台中打印。但是,如果我去那条路并检查图像,那么它的大小为零字节,没有任何预览可用。
webURL图像正确我也可以从网络浏览器查看。
我不知道我的代码在哪里出错。
能帮我解决这个问题吗?
提前谢谢。
答案 0 :(得分:1)
dataWithContentsOfURL
不是从服务器下载图片asynchronously
。现在如果imagesize足够大,那么下载需要一些时间。并且您正在直接尝试将图像存储到文档目录。我认为这会产生问题。您应该使用NSUrlSession
来获取图像,您应该将数据写入本地存储,例如来自NSUrlSession
方法调用的完成处理程序的文档目录。您也可以使用AFNetworking
来管理这种类型的东西。
第二件事使用
[data writeToFile:path atomically:NO];
将数据存储到文档目录,路径是最终路径,对于不同的数据应该是唯一的。
答案 1 :(得分:1)
[NSData dataWithContentsOfURL]
不是异步方法
如果您调试代码,您会发现imagedata
将为nil
你首先应该获得imagedata然后存储它
您可以使用AFNetworing
,SDWebImage
框架或只使用NSURLSession
下载
这是我自己的一个解决方案
[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError * error) {
//error
if (error) {
//handle error
return;
}
if (data) {
//store imagedata
[data writeToFile:filepath atomically:NO];
}
}];
美好的一天:)