2015-09-21 30 views
14

Zastanawiam się, czy istnieje sposób, aby uzyskać oryginalną nazwę pliku za pomocą PHAsset?PHAsset uzyskać oryginalną nazwę pliku

Korzystam z następującego kodu, aby wyodrębnić informacje o pliku.

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { 
    entity.fileUrl = [info objectForKey:@"PHImageFileURLKey"]; 
    entity.filename = [[NSFileManager defaultManager] displayNameAtPath:[ entity.fileUrl path]]; 
    }]; 

Jednak ona nie zwraca oryginalną nazwę ale nazwę w formacie „img_123” Właśnie sprawdzane urzędowe dokumenty Apple. wprowadzono nową klasę PHAssetResource i właściwość originalFilename, która jest dostępna w systemie iOS 9+. Problem polega na tym, że korzystam z biblioteki wyboru grafiki CTAssetsPickerController opartej na strukturze Zdjęć; zwraca wybrany obraz jako obiekt PHAsset. PS. Szukam rozwiązania zgodnego z iOS 8 :). Dziękujemy!

Odpowiedz

36

Na iOS 8 twoje rozwiązanie jest właściwe (i tylko podejście) do uzyskania nazwy pliku w ogóle.

iOS 9 to działa:

NSArray *resources = [PHAssetResource assetResourcesForAsset:asset]; 
NSString *orgFilename = ((PHAssetResource*)resources[0]).originalFilename; 
+0

co powinienem zrobić dla ios 8 lub poprzedniej wersji? – iHart

2

Być może można użyć metody, to działa powyżej systemów iOS 8:

[asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { 

    CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL]; 
    NSLog(@"%@",contentEditingInput.fullSizeImageURL);//get url 
    NSLog(@"%@", fullImage.properties.description);//get {TIFF}, {Exif} 
}]; 
+0

Hej dzięki. Użyłem podejścia sugerowanego w przyjętej odpowiedzi. ale po wykopaniu źródła (pliki nagłówkowe) stwierdziłem, że mogę użyć podejścia podobnego do twojego – ProblemSlover

2

Short sposób, aby uzyskać nazwę pliku z jednej linii kodu. Zasób ma właściwość dostępu do nazwy pliku.

NSString*FileName=[asset valueForKey:@"filename"]; 
NSLog(@"File name %@",FileName); 

Its done. 

Note: Accepted answer takes lots of time to load a phasset but it works.