You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:01:25