我想知道是否有办法使用PHAsset获取原始文件名?
我使用以下代码提取文件信息。
[[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]];
}];
但是,它不会返回原始名称,但格式为" img_123"
我刚检查过官方苹果文档。已经引入了新的类PHAssetResource
和属性originalFilename
,可在iOS 9+中使用。问题是我使用了基于Photos框架的图像选择器库CTAssetsPickerController;它将拾取的图像作为PHAsset
对象返回。 PS。我正在寻找与iOS 8兼容的解决方案:)。
谢谢!
答案 0 :(得分:40)
在iOS 8上,您的解决方案是正确的(也是唯一的方法)来获取文件名。
在iOS 9上,这有效:
NSArray *resources = [PHAssetResource assetResourcesForAsset:asset];
NSString *orgFilename = ((PHAssetResource*)resources[0]).originalFilename;
答案 1 :(得分:3)
使用一行代码获取文件名的简短方法。资产具有访问文件名的属性。
// Currently inside an F# document
let FS_list = [1;2;3]
let CS_list = ResizeArray<int> FS_list // System.Collections.Generic.List
let FS_converted_back = Seq.toList CS_list
答案 2 :(得分:2)
也许你可以使用这个方法,它可以在iOS8上面运行:
[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}
}];
答案 3 :(得分:0)
我不得不修改代码,因为它开始返回废话名称。我的解决方案是根据资产的mediaType和资源的类型选择资源,但是也许有一些更简单的方法:
extension PHAsset {
var primaryResource: PHAssetResource? {
let types: Set<PHAssetResourceType>
switch mediaType {
case .video:
types = [.video, .fullSizeVideo]
case .image:
types = [.photo, .fullSizePhoto]
case .audio:
types = [.audio]
case .unknown:
types = []
@unknown default:
types = []
}
let resources = PHAssetResource.assetResources(for: self)
let resource = resources.first { types.contains($0.type)}
return resource ?? resources.first
}
var originalFilename: String {
guard let result = primaryResource else {
return "file"
}
return result.originalFilename
}
}