ios - 从 NSData 确定 MIME 类型?

标签 ios objective-c mime-types nsdata

如何确定 NSData 对象的 MIME 类型?我计划让用户从他们的 iPhone 上传视频/图片,并将该文件包装在 NSData 类中。

我想知道我是否可以从 NSData 中分辨出 mime 类型。这个问题只有几个答案,最近的一个是 2010 年(4 年前!)。谢谢!

NSData *data; // can be an image or video
NSString *mimeType = [data getMimetype]; // how would I implement getMimeType

最佳答案

基于 ml's answer from a similar post ,我为 NSData 添加了 mime 类型确定:

目标:

+ (NSString *)mimeTypeForData:(NSData *)data {
    uint8_t c;
    [data getBytes:&c length:1];

    switch (c) {
        case 0xFF:
            return @"image/jpeg";
            break;
        case 0x89:
            return @"image/png";
            break;
        case 0x47:
            return @"image/gif";
            break;
        case 0x49:
        case 0x4D:
            return @"image/tiff";
            break;
        case 0x25:
            return @"application/pdf";
            break;
        case 0xD0:
            return @"application/vnd";
            break;
        case 0x46:
            return @"text/plain";
            break;
        default:
            return @"application/octet-stream";
    }
    return nil;
}

swift :

static func mimeType(for data: Data) -> String {

    var b: UInt8 = 0
    data.copyBytes(to: &b, count: 1)

    switch b {
    case 0xFF:
        return "image/jpeg"
    case 0x89:
        return "image/png"
    case 0x47:
        return "image/gif"
    case 0x4D, 0x49:
        return "image/tiff"
    case 0x25:
        return "application/pdf"
    case 0xD0:
        return "application/vnd"
    case 0x46:
        return "text/plain"
    default:
        return "application/octet-stream"
    }
}

这只处理主要文件类型,但您可以根据需要完成它:所有文件签名都可用 here , 只需使用与我相同的模式即可。

PS:对应的mime类型都有here

关于ios - 从 NSData 确定 MIME 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789770/

相关文章:

ios - Xcode/iOS xctest - 无法找到构建输入文件

objective-c - 使用 GameKit 以字节形式发送和接收 NSMutableArray

objective-c - ExtAudioFileWrite仅写入文件的第一位

ios - 使用 ios 9.2 键盘向下隐藏

php - 如何返回图像

email - 您能确定一封电子邮件是否仅从电子邮件标题中包含附件吗

firefox - MP4 文件无法在 Firefox 中播放 - 有什么好的视频替代方案吗?

ios - 事件未添加到日历中?

ios - 如何设置 SKLabelNode 的文本颜色?

ios - 使用 plistbuddy 从 plist 中的字典中读取所有键