MIMEタイプからファイル拡張子を検索
MIMEコンテンツタイプから、人やソフトウェアが一般に想定するファイル拡張子を取得できます。application/json、image/jpeg、text/html; charset=utf-8のような値を受け付け、大文字と小文字を正規化し、MIMEパラメーターを除去します。そのうえで、組み込みテーブルにある優先拡張子と一般的な代替候補をすべて返します。レスポンスヘッダー、アップロード記録、データURIにメディアタイプはあるものの、信頼できるファイル名がない場合に便利です。
無料で実行
コンテンツタイプを実用的なファイル接尾辞へ変換します
HTTPレスポンス、メール添付、オブジェクトストレージ、データURIでは、MIMEタイプで内容が示されても、ファイル名が空または不確かなことがあります。この検索を使うと、アプリケーションで利用しやすい接尾辞を取得できます。image/jpegのようなタイプ/サブタイプ形式の値を送信すると、主要な拡張子と認識済み候補の順序付き一覧が返ります。主要値はファイル名を作る際の一般的な既定値で、全候補は既存名との照合や許可形式の表示に役立ちます。拡張子には先頭のピリオドが付かないため、命名規則に合わせて連結、比較、整形できます。このサービスはファイルのバイト列を調べず、ヘッダーだけでファイルが正しいとは判断しません。Web形式、文書、アーカイブ、フォント、音声、画像、動画の組み込みテーブルを使い、拡張子からMIMEへの対応を逆引きすることだけに特化しています。
正規化、別名、複数の拡張子の扱いをご確認ください
実際のContent-Type値は、登録例ほど整っていないことがあります。サーバーが大文字を使ったり、文字コードなどのパラメーターを追加したりするためです。この検索では前後の空白を除き、メディアタイプを小文字に変換し、最初のセミコロン以降を無視します。そのため、Text/HTML; charset=UTF-8はtext/htmlと同じ結果になります。テーブルを参照する前に正規化後のタイプ/サブタイプ構文を検証するため、形式不正と、有効でも未対応のMIMEタイプを区別できます。形式によっては一般的な接尾辞が複数あります。たとえばimage/jpegではjpgが優先され、jpegとjpeも候補に含まれます。順序は意図的かつ安定しており、独自の優先規則を作らずprimary_extensionを利用できます。content_typeとmimeも別名として受け付けますが、生成クライアントの標準フィールドはmime_typeです。
取り込みとダウンロードで結果を安全にお使いください
一般的な処理では、本文とContent-Typeヘッダーを受け取り、拡張子を選び、生成した名前で本文を保存します。最後の要素にはprimary_extensionを使えますが、内容の検証は別途行ってください。MIMEメタデータは欠落、誤り、またはアップロード者による操作の可能性があり、もっともらしい接尾辞を付けても信頼できないバイト列が安全になるわけではありません。実行、プレビュー、公開を行う場合は、先に内容を検査し、適切なセキュリティーポリシーを適用してください。全候補は検証にも便利です。既存名の接尾辞を正規化して候補に含まれるか確認すれば、優先値がjpgという理由だけで正当なjpegファイルを拒否せずに済みます。未知のタイプでは、危険または誤解を招く名前を推測せず、明示的なエラーを返します。組み込みテーブルのため結果は再現可能です。API実行料金は1項目あたり$0.002です。
活用例
ダウンロードしたレスポンスに名前を付ける
HTTPレスポンスにContent-Typeはあるものの、利用可能なContent-Dispositionファイル名がない場合に、一般的な接尾辞を選べます。
アップロードのメタデータを確認する
アップロードされたファイルの接尾辞を、申告されたMIMEタイプに対応する一般的な拡張子と照合できます。
保存済みバイナリーオブジェクトを出力する
MIMEタイプは保持していても元の名前がないメタデータから、読みやすいファイル名を再構成できます。
よくある質問
返される拡張子にピリオドは含まれますか?
いいえ。拡張子は先頭のピリオドなしで、jpgやhtmlのように返されます。
charsetなどのMIMEパラメーターはどうなりますか?
最初のセミコロン以降のパラメーターは無視されるため、text/html; charset=utf-8はtext/htmlとして検索されます。
1つのMIMEタイプから複数の拡張子が返るのはなぜですか?
複数の一般的な接尾辞を持つ形式があるためです。優先拡張子を1つ示し、代替候補を安定した順序で保持します。
ファイルの内容も検証されますか?
いいえ。申告されたMIMEメタデータだけを対応付けます。信頼できないバイト列は、実行、プレビュー、公開の前に別途検査してください。
MIMEタイプがテーブルにない場合はどうなりますか?
サブタイプから拡張子を推測せず、無効な入力としてエラーを返します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/extension-from-mime \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mime_type":"application/json; charset=utf-8"}'const res = await fetch("https://api.kit.forhosting.com/dev/extension-from-mime", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mime_type": "application/json; charset=utf-8"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/extension-from-mime",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mime_type": "application/json; charset=utf-8"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/extension-from-mime", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mime_type":"application/json; charset=utf-8"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mime_type":"application/json; charset=utf-8"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/extension-from-mime", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"mime_type": "application/json; charset=utf-8"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.extension_from_mime",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |