Reputation: 70997
I have a NSURL
object which gives me the path of a local file (in documents folder). I want to populate an NSData
object with the contents of this file. Tried using dataWithContentsOfURL:
but this fails. I know the file exists because the iPhone SDK
returns the path.
Can someone please tell me how I can get an NSData
object from the URL
of a local file?
Thanks.
Upvotes: 88
Views: 78684
Reputation: 5806
guard let data = FileManager.default.contents(atPath: path) else
{ ...
Upvotes: 0
Reputation: 60110
// Given some file path URL: NSURL *pathURL
// Note: [pathURL isFileURL] must return YES
NSString *path = [pathURL path];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
Swift code:
let data = FileManager.default.contents(atPath: path)
Upvotes: 170
Reputation: 741
For swift3 I found answer from following URL helpful
( I was getting following path , after capturing image using phonegap plugin
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) { //Add code of Alamofire here }
Upvotes: 0
Reputation: 4918
Make sure your local URL starts with "file://" then you would just have to do this:
NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path];
Upvotes: 3
Reputation: 753
To get this work you just need to do:
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];
Upvotes: 29