505

cURL を使用して、HTTP POST でデータ パラメータを送信するだけでなく、特定のフォーム名でファイルをアップロードしたいと考えています。どうすればいいですか?

HTTP ポスト パラメータ:

userid = 12345 filecomment = これは画像ファイルです

HTTP ファイルのアップロード: ファイルの場所 = /home/user1/Desktop/test.jpg ファイルのフォーム名 = image (PHP 側の $_FILES['image'] に対応)

cURL コマンドの一部を次のように考えました。

curl -d "userid=1&filecomment=This is an image file" --data-binary @"/home/user1/Desktop/test.jpg" localhost/uploader.php

私が得ている問題は次のとおりです。

Notice: Undefined index: image in /var/www/uploader.php

問題は、PHP スクリプトで $_FILES['image'] を使用してファイルを取得していることです。

それに応じて cURL コマンドを調整するにはどうすればよいですか?

4

10 に答える 10

761

-F次のオプションを使用する必要があります。
-F/--form <name=content> Specify HTTP multipart POST data (H)

これを試して:

curl \
  -F "userid=1" \
  -F "filecomment=This is an image file" \
  -F "image=@/home/user1/Desktop/test.jpg" \
  localhost/uploader.php
于 2012-10-01T05:18:26.037 に答える
127

ユーザー ID をパス変数としてキャッチする (推奨):

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "data=@test.mp3" http://mysuperserver/media/1234/upload/

フォームの一部としてユーザー ID をキャッチ:

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "data=@test.mp3;userid=1234" http://mysuperserver/media/upload/

また:

curl -i -X POST -H "Content-Type: multipart/form-data" 
-F "data=@test.mp3" -F "userid=1234" http://mysuperserver/media/upload/
于 2015-01-20T12:33:33.853 に答える
10

何度も試した後、このコマンドはうまくいきました:

curl -v -F filename=image.jpg -F upload=@image.jpg http://localhost:8080/api/upload
于 2020-06-07T14:33:57.880 に答える
1
cat test.txt 

ファイル test.txt の内容。

curl -v -F "hello=word" -F "file=@test.txt" https://httpbin.org/post

> POST /post HTTP/2
> Host: httpbin.org
> user-agent: curl/7.68.0
> accept: */*
> content-length: 307
> content-type: multipart/form-data; boundary=------------------------78a9f655d8c87a53
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
* We are completely uploaded and fine
< HTTP/2 200 
< date: Mon, 15 Nov 2021 06:18:47 GMT
< content-type: application/json
< content-length: 510
< server: gunicorn/19.9.0
< access-control-allow-origin: *
< access-control-allow-credentials: true
< 
{
  "args": {}, 
  "data": "", 
  "files": {
    "file": "file test.txt content.\n"
  }, 
  "form": {
    "hello": "word"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "307", 
    "Content-Type": "multipart/form-data; boundary=------------------------78a9f655d8c87a53", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.68.0", 
    "X-Amzn-Trace-Id": "Root=1-6191fbc7-6c68fead194d943d07148860"
  }, 
  "json": null, 
  "origin": "43.129.xx.xxx", 
  "url": "https://httpbin.org/post"
}
于 2021-11-15T06:21:59.863 に答える