从 iOS 8 中的 PHAsset 获取文件扩展名?
Posted
技术标签:
【中文标题】从 iOS 8 中的 PHAsset 获取文件扩展名?【英文标题】:Get File Extension from a PHAsset in iOS 8? 【发布时间】:2014-09-23 14:48:45 【问题描述】:有什么方法可以区分 PHAsset 的文件扩展名吗?我的应用需要知道照片是否为 .GIF。我没有看到任何方法可以做到这一点。
【问题讨论】:
请在这里查看我的答案***.com/questions/25919512/… 【参考方案1】:更好的方法是使用 uniformTypeIdentifier。文件可以任意命名,可以包含也可以不包含文件扩展名。
[asset valueForKey:@"uniformTypeIdentifier"];
【讨论】:
是私有API吗?【参考方案2】:使用 valueForKey:您可以使用“pathExtension”从中提取文件扩展名获取 PHAsset 文件名 例如: PHAsset *selectedAsset = ...
NSString *fileName =[selectedAsset valueForKey:@"filename"];
NSString * fileExtension = [fileName pathExtension];
【讨论】:
【参考方案3】:文件名是一个实现细节,可能会或可能不会告诉您文件的内容到底是什么。
当您调用requestImageDataForAsset
时,Photos 传递给您的完成处理程序的dataUTI
参数会告诉您图像数据的统一类型标识符。
【讨论】:
此调用需要网络访问来确定云中项目的 UTI。有什么办法吗?似乎照片框架在下载之前不知道云中的图像是什么格式,如果您只想从库中获取 GIF,那是相当不理想的!【参考方案4】:PHAssetResource.uniformTypeIdentifier
似乎可以胜任。
可以使用类函数PHAssetResource. assetResources(for:)
获取PHAsset
s。
图片确实不意味着列表中只有一项,因此请查看文档。
【讨论】:
【参考方案5】:Swift 5 优雅的解决方案
extension PHAsset
func getFileName() -> String?
return self.value(forKey: "filename") as? String
func getExtension() -> String?
guard let fileName = self.getFileName() else
return nil
return URL(fileURLWithPath: fileName).pathExtension
【讨论】:
【参考方案6】:在 Swift 中,使用:
URL(fileURLWithPath: (asset.value(forKey: "filename") as! String)).pathExtension
【讨论】:
以上是关于从 iOS 8 中的 PHAsset 获取文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用 RNFS 使用从 RNCameraRoll 获取的 phasset 读取文件