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にアップロードする必要がある場合に使用します。