curlでファイルをアップロードする

curlでマルチパートフォームデータやバイナリ転送を使ったファイルアップロード方法を解説。カスタムファイル名、MIMEタイプ、複数ファイルの送信パターンを学びましょう。

General

詳細な説明

curlでファイルをアップロードする

ファイルアップロードは、画像、ドキュメント、その他のバイナリコンテンツを扱うAPIで一般的な要件です。curlはサーバーへのファイル送信に複数の方法をサポートしています。

マルチパートフォームアップロード

最も一般的な方法は、-F(form)を使って multipart/form-data としてファイルを送信することです:

curl -X POST https://api.example.com/upload \
  -F "file=@photo.jpg" \
  -F "description=Profile photo"

@ プレフィックスは、ディスクからファイル内容を読み込むことをcurlに指示します。これがないと、curlは文字列 "photo.jpg" をそのまま送信します。

Content Typeの指定

自動検出されたMIMEタイプを上書きします:

curl -X POST https://api.example.com/upload \
  -F "file=@data.csv;type=text/csv"

カスタムファイル名

ローカルファイル名とは異なる名前でファイルを送信します:

curl -X POST https://api.example.com/upload \
  -F "file=@localfile.txt;filename=remote-name.txt"

複数ファイルのアップロード

1回のリクエストで複数のファイルをアップロードします:

curl -X POST https://api.example.com/upload \
  -F "files=@image1.jpg" \
  -F "files=@image2.jpg" \
  -F "files=@image3.jpg"

バイナリアップロード

マルチパートフォームデータではなく、生のバイナリデータを期待するAPIの場合は --data-binary を使います:

curl -X POST https://api.example.com/upload \
  -H "Content-Type: application/octet-stream" \
  --data-binary @largefile.zip

stdinからのストリーミング

データを直接curlにパイプしてストリーミングアップロードを行います:

tar czf - ./project | curl -X POST \
  -H "Content-Type: application/gzip" \
  --data-binary @- https://api.example.com/upload

進捗の監視

大きなファイルのアップロード時に、--progress-bar でシンプルな進捗インジケーターを表示するか、-# を省略形として使います。デフォルトでは、curlはアップロード速度や推定残り時間を含む詳細な転送統計テーブルを表示します。

ユースケース

ファイル管理システムを構築する開発者が、元のファイル名やContent Typeを保持しながら、ユーザーのドキュメントや画像をクラウドストレージAPIにアップロードする必要がある場合に使用します。

Try It — Curl to Code Converter

フルツールを開く