文字っぽいの。

文字を書いています。写真も混ざります。

Swiftでファイル名からMIMEタイプを生成する。

やりたいこと

ファイル名からMIMEタイプを生成したい時がある。例えば、

  • "image.png" -> image/png
  • "movie.mov" -> video/quicktime

という感じ。

実装方法

Uniform Type Identifiers を利用する。そのため、iOS 14以降じゃないと使えない。

上述したPNG画像の場合はこんな感じ。

import UniformTypeIdentifiers

let url = URL(string: "file://path/to/image.png")!
let mimeType = UTType(filenameExtension: url.pathExtension)!.preferredMIMEType!

print(mimeType) // => "image/png"

動画も同じ感じで使える。

import UniformTypeIdentifiers

let url = URL(string: "file://path/to/movie.mov")!
let mimeType = UTType(filenameExtension: url.pathExtension)!.preferredMIMEType!

print(mimeType) // => "video/quicktime"

URLではなく、NSStringでも同様のことができる。Stringはそのままだと使えないので、一旦NSStringに変換することになる。

import UniformTypeIdentifiers

let nsString = NSString(string: "video.mov")
let mimeType = UTType(filenameExtension: nsString.pathExtension)!.preferredMIMEType!

print(mimeType) // => "video/quicktime"

備考

当然だが、これはファイル名(の拡張子)からMIMEタイプに変換している。実際にファイルの中身を検査している訳ではないため、拡張子がついていなかったり拡張子が信用できない場合には利用できない。