code_junkie

In-memory mime-type detection with Cocoa (OS X)?

Nov 12th, 2011
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. NSData *movieData = ...read from memory...;
  2. QTDataReference *movieDataReference = [[QTDataReference alloc] initWithReferenceToData:movieData name:fileName MIMEType:@"video/x-m4v"];
  3. QTMovie *mov = [QTMovie movieWithDataReference:movieDataReference error:&err];
  4.  
  5. - (NSString*)mimeTypeForExtension:(NSString*)ext {
  6.  
  7. CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)ext,NULL);
  8. return NSMakeCollectable(UTTypeCopyPreferredTagWithClass((CFStringRef)UTI,kUTTagClassMIMEType));
  9. }
  10.  
  11. -(NSString*)mimeTypeForExtension:(NSString*)ext
  12. {
  13. NSAssert( ext, @"Extension cannot be nil" );
  14. NSString* mimeType = nil;
  15.  
  16. CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
  17. (CFStringRef)ext, NULL);
  18. if( !UTI ) return nil;
  19.  
  20. CFStringRef registeredType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);
  21. if( !registeredType ) // check for edge case
  22. {
  23. if( [ext isEqualToString:@"m4v"] )
  24. mimeType = @"video/x-m4v";
  25. else if( [ext isEqualToString:@"m4p"] )
  26. mimeType = @"audio/x-m4p";
  27. // handle anything else here that you know is not registered
  28. } else {
  29. mimeType = NSMakeCollectable(registeredType);
  30. }
  31.  
  32. CFRelease(UTI);
  33. return mimeType;
  34. }
  35.  
  36. -(NSString *)mimeTypeForFileAtPath:(NSString *)path error:(NSError **)err {
  37. NSString *uti, *mimeType = nil;
  38.  
  39. if (!(uti = [[NSWorkspace sharedWorkspace] typeOfFile:path error:err]))
  40. return nil;
  41. if (err)
  42. *err = nil;
  43.  
  44. if ((mimeType = (NSString *)UTTypeCopyPreferredTagWithClass((CFStringRef)uti, kUTTagClassMIMEType)))
  45. mimeType = NSMakeCollectable(mimeType);
  46.  
  47. return mimeType;
  48. }
Add Comment
Please, Sign In to add comment