88

我有一个NSURL对象,它给了我本地文件的路径(在文档文件夹中)。我想NSData用这个文件的内容填充一个对象。尝试使用dataWithContentsOfURL:,但这失败了。我知道该文件存在,因为 iPhoneSDK返回路径。

有人可以告诉我如何从本地文件中获取NSData对象吗?URL

谢谢。

4

5 回答 5

168
// Given some file path URL: NSURL *pathURL
// Note: [pathURL isFileURL] must return YES
NSString *path = [pathURL path];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];

SWIFT代码:

let data = FileManager.default.contents(atPath: path)
于 2009-10-03T17:43:48.933 回答
29

要完成这项工作,您只需要做:

NSURL *imgPath = [[NSBundle mainBundle] URLForResource:@"search" withExtension:@"png"];
NSString*stringPath = [imgPath absoluteString]; //this is correct  

//you can again use it in NSURL eg if you have async loading images and your mechanism 
//uses only url like mine (but sometimes i need local files to load)
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringPath]];
UIImage *ready = [[[UIImage alloc] initWithData:data] autorelease];
于 2012-11-16T09:33:43.187 回答
2

确保您的本地 URL 以“file://”开头, 然后您只需执行以下操作:

 NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path];
于 2016-08-05T09:56:58.153 回答
0

对于 swift3,我发现以下 URL 的答案很有帮助

(在使用 phonegap 插件捕获图像后,我得到了以下路径

file:///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg)

https://stackoverflow.com/a/41043447/6383908

if let videoURL = URL(string: urlString), let videodata = try? Data(contentsOf: videoURL) { //在此处添加 Alamofire 的代码 }

于 2017-05-02T19:18:38.983 回答
0
guard let data = FileManager.default.contents(atPath: path) else
    { ...
于 2020-03-31T12:34:10.020 回答