如何从网站上取下图像并将其保存到NSDocumentDirectory

时间:2010-02-24 21:47:36

标签: objective-c image file copy document

我正在尝试创建一个从网站上拍照的应用程序,并将它们保存到NSDocumentDirectory以供以后使用。到目前为止,我的尝试失败了,我想知道该怎么做。

不需要更多的解释,但这里有一些我的(失败的)尝试:
之一:

NSString *path = @"http://miniwidgit.webs.com/TabRight2.png";
NSFileManager *fmgr = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [[NSString alloc] initWithFormat:@"%@/File.jpg", documentsDirectory];
NSLog(fileName);
NSError *err;
if ([fmgr copyItemAtPath:path toPath:fileName error:&err]) 
{} 
else 
{
    NSLog([NSString stringWithFormat:@"%@%@.", @"There was an error. The error was: ", err]);
}

二:

NSURL *path = [NSURL URLWithString:@"http://miniwidgit.webs.com/TabRight2.png"];
NSFileManager *fmgr = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [[NSString alloc] initWithFormat:@"%@/File.jpg", documentsDirectory];
NSLog(fileName);
NSError *err;
NSString *image = [[NSString alloc] initWithContentsOfURL:path];
[image writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionExternalRepresentation error:&err];
NSLog([NSString stringWithFormat:@"%@%@.", @"There was an error. The error was: ", err]);

On One,我收到了错误:

  

错误域= NSPOSIXErrorDomain代码= 2 UserInfo = 0x3b171b0“操作   无法完成。没有这样的文件或目录,“

但这没有意义,因为图像(在我的网站上)存在。

On Two,我收到了错误:

  

错误域= NSCocoaErrorDomain代码= 517 UserInfo = 0x3b33090“操作   无法完成。 (可可错误517。)“

1 个答案:

答案 0 :(得分:4)

这不是文件路径 - 它是HTTP资源的URL。您需要使用其中一个URL加载API(例如NSURLDownload)来下载图像。

使用现在排在第1位的代码,它正在寻找名为“TabRight2.png”的文件,该文件位于名为“miniwidget.webs.com”的目录中,该目录位于名为“http:”的目录中,在当前目录中 - 当然也找不到。

使用第二个,您正在尝试将图像加载到NSString中。在这种情况下很难说出确切的错误是什么,但这是不可取的,可能是罪魁祸首。 NSStrings用于文本,图像可以包含在任何编码中无效的文本序列。您应该使用NSData来存储二进制数据,而不是NSString。