从 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:) 获取PHAssets。

图片确实意味着列表中只有一项,因此请查看文档。

【讨论】:

【参考方案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 获取文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

从 PHAsset swift 5 IOS13 获取文件名

iOS 8 从 PHAsset 快速加载图像

我无法使用 RNFS 使用从 RNCameraRoll 获取的 phasset 读取文件

如何从 PHAsset for iOS 13 获取图像 url

获取 PHAsset 的本地文件路径

PHAsset 无法获取