2015-09-21 15 views
14

Mi chiedo se esiste un modo per ottenere il nome del file originale utilizzando PHAsset?PHAsset ottenere il nome file originale

Io uso il seguente codice per estrarre le informazioni sul file.

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

tuttavia, non restituisce nome originale, ma il nome nel formato "img_123" Ho appena controllato documentazione ufficiale di Apple. è stata introdotta una nuova classe PHAssetResource e la proprietà originalFilename disponibile in iOS 9+. Il problema è che io uso la libreria di selezione immagini CTAssetsPickerController che è basata sul framework Photos; restituisce l'immagine selezionata come l'oggetto PHAsset. PS. Sto cercando la soluzione compatibile con iOS 8 :). Grazie!

risposta

36

Su iOS 8 la soluzione è il giusto (e unico approccio) per ottenere un nome file.

Su iOS 9 funziona:

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

Cosa devo fare per iOS 8 o versione precedente? – iHart

2

forse è possibile utilizzare il metodo, funziona sopra 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

Ehi, grazie. Ho usato un approccio suggerito nella risposta accettata. ma dopo aver scavato nella sorgente (file di intestazione) ho scoperto che posso usare un approccio simile al tuo – ProblemSlover

2

strada più breve per ottenere il nome del file con una sola riga di codice. L'asset ha una proprietà per accedere al nome del file.

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. 
Problemi correlati