下载的图像在文档目录中具有零个字节

时间:2016-09-07 08:06:05

标签: ios objective-c nsfilemanager nsdocumentdirectory

我正在尝试将图像从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图像正确我也可以从网络浏览器查看。 我不知道我的代码在哪里出错。
能帮我解决这个问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

dataWithContentsOfURL不是从服务器下载图片asynchronously。现在如果imagesize足够大,那么下载需要一些时间。并且您正在直接尝试将图像存储到文档目录。我认为这会产生问题。您应该使用NSUrlSession来获取图像,您应该将数据写入本地存储,例如来自NSUrlSession方法调用的完成处理程序的文档目录。您也可以使用AFNetworking来管理这种类型的东西。

第二件事使用

 [data writeToFile:path atomically:NO];

将数据存储到文档目录,路径是最终路径,对于不同的数据应该是唯一的。

答案 1 :(得分:1)

[NSData dataWithContentsOfURL]不是异步方法

如果您调试代码,您会发现imagedata将为nil

你首先应该获得imagedata然后存储它

您可以使用AFNetworingSDWebImage框架或只使用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]; } }];

美好的一天:)