Determine MIME type from NSData?

后端 未结 4 2038
深忆病人
深忆病人 2020-12-08 04:33

How would you determine the mime type for an NSData object? I plan to have the user to upload a video/picture from their iPhone and have that file be wrapped in a NSData cla

4条回答
  •  鱼传尺愫
    2020-12-08 05:20

    Based on ml's answer from a similar post, I've added the mime types determination for NSData:

    ObjC:

    + (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"
        }
    }
    

    This handle main file types only, but you can complete it to fit your needs: all the files signature are available here, just use the same pattern as I did.

    PS: all the corresponding mime types are available here

提交回复
热议问题