curlでマルチパートフォームデータを送信する
curlの-Fフラグでmultipart/form-dataを送信する方法を解説。メタデータ付きファイルアップロード、MIMEタイプ設定、カスタムファイル名、マルチパートリクエストの変換を学びましょう。
General
詳細な説明
curlでマルチパートフォームデータを扱う
マルチパートフォームデータ(multipart/form-data)は、ファイルアップロードを含むHTMLフォームの標準的なエンコーディングです。curlの -F フラグを使えば、これらのリクエストを簡単に構築できます。
基本的なフォーム送信
curl -X POST https://example.com/form \
-F "name=Alice" \
-F "email=alice@example.com"
各 -F フラグがフォームフィールドを作成します。curlは自動的に Content-Type をランダムに生成されたバウンダリ付きの multipart/form-data に設定します。
フォームフィールド付きファイル
curl -X POST https://example.com/upload \
-F "avatar=@photo.jpg" \
-F "username=alice" \
-F "bio=Hello world"
値の @ プレフィックスは、ファイルの内容を読み込むことをcurlに指示します。@ がないと、プレーンテキストフィールドとして送信されます。
ファイルのContent Type指定
自動検出されたMIMEタイプを上書きします:
curl -X POST https://example.com/upload \
-F "document=@report.pdf;type=application/pdf"
カスタムファイル名
異なる名前でファイルを送信します:
curl -X POST https://example.com/upload \
-F "file=@/tmp/temp123.csv;filename=report.csv"
1つのフィールドに複数ファイル
curl -X POST https://example.com/upload \
-F "attachments=@file1.pdf" \
-F "attachments=@file2.pdf" \
-F "attachments=@file3.pdf"
stdinからのファイルコンテンツ
echo "Hello World" | curl -X POST https://example.com/upload \
-F "file=@-;filename=greeting.txt"
-Fと-dの違い
| フラグ | Content-Type | 用途 |
|---|---|---|
-F |
multipart/form-data |
ファイルアップロード、混合データ |
-d |
application/x-www-form-urlencoded |
シンプルなキー・バリューフォーム |
複雑なマルチパートの例
curl -X POST https://api.example.com/documents \
-F "file=@contract.pdf;type=application/pdf;filename=contract-2026.pdf" \
-F "metadata={\"category\":\"legal\",\"priority\":\"high\"};type=application/json" \
-H "Authorization: Bearer token123"
これは1つのマルチパートリクエストでPDFファイルとJSONメタデータを同時に送信します。ドキュメント管理APIでよく見られるパターンです。
ユースケース
ドキュメントアップロード機能を構築する開発者が、1回のHTTPリクエストでファイルとメタデータフィールドをクラウドストレージAPIに送信する必要がある場合に使用します。