使用curl POST多部分/表单数据的正确方法是什么?

我使用这个语法来发布一个文件以及一些参数:

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上传文件我发现该path需要转义双引号

例如

 curl -v -F 'upload=@\"C:/myfile.txt\"' URL 

这是为我工作

 curl -F file=@filename URL 

在Windows 10中,在PowerShell中使用curl 7.28.1,我find了以下这些工作:

 $filePath = "c:\temp\dir with spaces\myfile.wav" $curlPath = ("myfilename=@" + $filePath) curl -v -F $curlPath URL