拡張子から MIME Type を取得する

2010年8月11日水曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

MobileCoreServices.framework に 拡張子とMIME Type の相互変換用の関数が用意されている。

UTType Reference

変換方法


変換はどちらの場合も一旦 UTIへの変換を経由する。
MIME Type (例:image/png)
 ↓
UTI(例:public.png)
 ↓
拡張子(例:png)
UTI への変換には UTTypeCreatePreferredIdentifierForTag() を使う。
逆に UTIからの変換には UTTypeCopyPreferredTagWithClass() を使う。

MIME Type から 拡張子を取得する場合はこんなコードになる。
CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(
 kUTTagClassMIMEType, (CFStringRef)mimeTYpe, NULL);
 
CFStringRef filenamExtension =
 UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);
 :
CFRelease(uti);
CFRelease(filenameExtension);

どちらの関数も引数に UTTagClass を取る。これは次の2つが定義されている。
const CFStringRef kUTTagClassFilenameExtension;
const CFStringRef kUTTagClassMIMEType;
また取得した文字列は CFReleaseで開放してやる必要がある。


サンプル


こんな感じ。

UTType系関数をラップするユーティリティクラスを用意してみた。
@interface UTTypeUtility : NSObject {
}

+ (NSString*)filenameExtensionFromMimeType:(NSString*)mimeType;
+ (NSString*)mimeTypeFromFilename:(NSString*)filename;
+ (NSString*)mimeTypeFromFilenameExtension:(NSString*)filenameExtension;

+ (NSString*)UTIfromMimeType:(NSString*)mimeType;
+ (NSString*)UTIfromFilename:(NSString*)filename;
+ (NSString*)UTIfromFilenameExtension:(NSString*)filenameExtension;

@end

中身はこんな感じ。
+ (NSString*)filenameExtensionFromMimeType:(NSString*)mimeTYpe
{
 CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(
  kUTTagClassMIMEType, (CFStringRef)mimeTYpe, NULL);
 
 NSString* filenamExtension =
  (NSString*)UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);
 
 CFRelease(uti);
 
 return [filenamExtension autorelease];
}

なお UTType系関数の利用には下記のフレームワークを追加する必要がある。

その上で MobileCoreServicesをインポートする。
#import <MobileCoreServices/MobileCoreServices.h>


ソースコード


GitHubからどうぞ。
UUTypeSample at 2010-08-10 from xcatsan's iOS-Sample-Code - GitHub
ソースコードはGitHubからどうぞ。


参考情報

Able Pear Software: How to get the file extension for a mime type on iOS
UTType関連の関数の使い方はここで知った。

Responses

Leave a Response

人気の投稿(過去 30日間)