この構文を使用して、いくつかのパラメーターと共にファイルを投稿しました。
curl -v -include --form "key1=value1" --form upload=localfilename URL
ファイルのサイズは約500Kです。まず第一に、私はコンテンツの長さは送信側で254であることがわかります。後でサーバー応答のコンテンツの長さは0になります。どこで問題がありますか?
これはコマンドの完全なトレースです。
* Couldn't find Host xxx.xxx.xxx.xxx in the _netrc file; using defaults
* About to connect() to xxx.xxx.xxx.xxx port yyyy (#0)
* Trying xxx.xxx.xxx.xxx...
* Adding handle: conn: 0x4b96a0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x4b96a0) send_pipe: 1, recv_pipe: 0
* Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx) port yyyy (#0)
* POST /zzzzzz/UploadFile HTTP/1.1
* User-Agent: curl/7.32.0
* Host: xxx.xxx.xxx.xxx:yyyy
* Accept: */*
* Content-Length: 254
* Expect: 100-continue
* Content-Type: multipart/form-data; boundary=------------------------948a6137eef50079
*
* HTTP/1.1 100 Continue
* HTTP/1.1 100 Continue
* HTTP/1.1 200 OK
* HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
* Server: Apache-Coyote/1.1
* Server: Apache-Coyote/1.1
* Added cookie JSESSIONID="C1D7DD042E250211D9DEA82688876F88" for domain xxx.xxx.xxx.xxx, path /zzzzz/, expire 0
* Set-Cookie: JSESSIONID=C1D7DD042E250211D9DEA82688876F88; Path=/zzzzzz/;
* HttpOnly
* Set-Cookie: JSESSIONID=C1D7DD042E250211D9DEA82688876F88; Path=/zzzzzz/; HttpOnly
* Content-Type: text/html;charset=ISO-8859-1
Content-Type: text/html;charset=ISO-8859-1
* Content-Length: 0
* Content-Length: 0
* Date: Tue, 01 Oct 2013 11:54:24 GMT
* Date: Tue, 01 Oct 2013 11:54:24 GMT
* Connection #0 to Host xxx.xxx.xxx.xxx left intact
次の構文はそれをあなたのために修正します:
curl -v -F key1=value1 -F upload=@localfilename URL
windowsでcurlを使用してファイルをアップロードするにはパスに二重引用符をエスケープする必要があることがわかりました
例えば.
curl -v -F 'upload=@\"C:/myfile.txt\"' URL
これは私のために働いたものです
curl -F file=@filename URL
Windows 10では、powershellで7.28.1をカールして、私は私のために働くために以下を見つけました:
$filePath = "c:\temp\dir with spaces\myfile.wav"
$curlPath = ("myfilename=@" + $filePath)
curl -v -F $curlPath URL
curl
を含むマルチパートHTTP PUTリクエストをJavaバックエンドに送信するのに苦労しました。私は単に試した
curl -X PUT URL \
--header 'Content-Type: multipart/form-data; boundary=---------BOUNDARY' \
--data-binary @file
ファイルの内容は
-----------BOUNDARY
Content-Disposition: form-data; name="name1"
Content-Type: application/xml;version=1.0;charset=UTF-8
<xml>content</xml>
-----------BOUNDARY
Content-Disposition: form-data; name="name2"
Content-Type: text/plain
content
-----------BOUNDARY--
しかし、境界が正しくないというエラーが常に発生しました。いくつかのJavaバックエンドのデバッグの後、私はJava実装が境界への接頭辞として\r\n--
を追加していたことを知りました。
<-- here's the CRLF
-------------BOUNDARY <-- added '--' at the beginning
...
-------------BOUNDARY <-- added '--' at the beginning
...
-------------BOUNDARY-- <-- added '--' at the beginning
すべてうまくいきました!
マルチパート境界のコンテンツの先頭に改行(CRLF \r\n
)を追加し、境界の先頭に--
を追加してやり直してください。
たぶんあなたは境界でこの変更を必要とするJavaバックエンドにリクエストを送っています。