iOS Swift:从PhotosPicker的Data中获取完整MIME类型
给PhotosPicker的Data扩展补充更多媒体类型的MIME识别
你用PhotosPicker选择媒体转成Data后,没法通过文件路径获取MIME类型,现有Data扩展只支持部分格式,要添加mp4、mov等视频类型的话,可以这样修改:
兼容原有结构的单字节签名版本
直接在mimeTypeSignatures字典里补充常见视频格式的首字节映射:
extension Data { private static let mimeTypeSignatures: [UInt8 : String] = [ // 图片类型 0xFF : "image/jpeg", 0x89 : "image/png", 0x47 : "image/gif", 0x49 : "image/tiff", 0x4D : "image/tiff", // 文档类型 0x25 : "application/pdf", 0xD0 : "application/vnd", 0x46 : "text/plain", // 新增视频类型 0x66 : "video/mp4", // MP4/MOV通用首字节(ftyp开头) 0x6D : "video/quicktime", // MOV文件moov开头的情况 0x52 : "video/x-msvideo" // AVI文件RIFF开头 ] var mimeType: String { var c: UInt8 = 0 copyBytes(to: &c, count: 1) return Data.mimeTypeSignatures[c] ?? "application/octet-stream" } }
更精准的多字节判断版本(区分MP4和MOV)
如果需要严格区分MP4和MOV(部分MOV文件也以ftyp开头),可以修改代码检查前4个字节,提升识别精度:
extension Data { private static let mimeTypeSignatures: [String : String] = [ // 图片类型 "\xFF" : "image/jpeg", "\x89PNG" : "image/png", "GIF8" : "image/gif", "II*" : "image/tiff", "MM*" : "image/tiff", // 文档类型 "%PDF" : "application/pdf", "\xD0\xCF\x11\xE0" : "application/vnd", // 视频类型 "ftypmp4" : "video/mp4", "ftypqt " : "video/quicktime", "moov" : "video/quicktime", "RIFF" : "video/x-msvideo" ] var mimeType: String { let prefix = String(bytes: prefix(4), encoding: .ascii) ?? "" for (signature, mimeType) in Data.mimeTypeSignatures { if prefix.hasPrefix(signature) { return mimeType } } return "application/octet-stream" } }
这个版本能精准识别不同视频格式:比如ftypmp4开头的是标准MP4,ftypqt 或moov开头的是MOV文件。
内容的提问来源于stack exchange,提问作者Coddo
相关产品推荐
相关产品推荐

