iPhone-로컬 파일 URL의 NSData


85

NSURL에게 (문서 폴더에서) 로컬 파일의 경로를 제공 하는 개체가 있습니다. NSData이 파일의 내용으로 개체 를 채우고 싶습니다 . 사용을 시도 dataWithContentsOfURL:했지만 실패합니다. iPhone SDK이 경로를 반환 하기 때문에 파일이 존재한다는 것을 알고 있습니다 .

누군가 로컬 파일 NSData에서 객체를 가져올 수있는 방법을 알려주시겠습니까 URL?

감사.


"그러나 실패"는 무엇을 의미합니까?
Marco

이 시점에서 멈춘다는 뜻입니다! 예외를 제공합니다. UIImagePickerController에서 가져온 URL 인 동영상 데이터에 액세스하려고합니다
lostInTransit

NURL이 아닌 개체를 전달하려는 것 같습니다. 파일 URL을 어떻게 얻습니까? NSString이 아닌 URL입니까?
Marco

@AliKhaki : 사소한 편집은하지 마십시오. 검토 대기열에있는 두 사람이 변경 사항을 검토해야합니다. 개선하기 위해 질문을 편집하는 경우 "감사합니다"와 같은 쓸모없는 항목을 자유롭게 제거하되 그 문제로만 질문을 편집하지 마십시오. 감사!
Cris Luengo

답변:


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

신속한 코드 :

let data = FileManager.default.contents(atPath: path)

1
contentsOfFile은 파일 경로와 함께 NSString을 사용합니다. NSURL 개체를 얻고 있습니다.
lostInTransit

확실하지 않지만 alloc 대신 defaultManager를 사용하면 init가 스레딩 문제를 일으킬 수 있습니다.
carlossless

2
NSFileManager를 워드 프로세서는 이 스레딩 고려 사항에 따라 말을 "공유 NSFileManager를 객체의 방법은 안전하게 여러 스레드에서 호출 할 수 있습니다." 그들이 주목하는 유일한 예외는 파일 관리자의 작업에서 위임 콜백을 처리하려는 경우입니다. 나는 그것이 여기에 적용되지 않는다고 생각합니다.
Tim

경로는 파일의 '전체 경로'이며 XCode의 File Inspector
Burak

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];

2

로컬 URL이 "file : //"시작하는지 확인한 다음 다음을 수행하면됩니다.

 NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path];

? //asset/asset.MOV ID = 095AA9E9 - A4F5-4035-9A21-3CFF04F45C70 및 내선 = MOV @ahbou : URL은 항상 자산 라이브러리로 반환됩니다
Mansuu ....

자산 (사진 및 비디오)에만 유효합니다. OP는 문서 폴더의 파일에 대해 질문합니다
ahbou

나는 데이터 객체를 생성 할 때 선택한 URL을 이리저리 asset_library이 @ahbou 전무 저를 준다
Mansuu ....

자산은 AssetsLibrary 또는 Photos.framework에서만 처리됩니다. 자산을 검색하려면 asset.assetForURL {}을 호출해야합니다.이 메서드를 검색하거나 별도의 주제로 새 질문을하십시오.
ahbou

0

swift3의 경우 다음 URL의 답변이 도움이되었습니다.

(phonegap 플러그인을 사용하여 이미지를 캡처 한 후 다음 경로를 얻었습니다.

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

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

let videoURL = URL (string : urlString)이면 let videodata = try? Data (contentsOf : videoURL) {// 여기에 Alamofire 코드 추가}


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.