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に送信する必要がある場合に使用します。

Try It — Curl to Code Converter

フルツールを開く