2014-11-06 105 views
2

我一直在試圖把文件上傳到在Linux命令行使用此命令的服務器:捲曲HTTP POST文件上傳

curl -v --data '[email protected]/var/www/fbapp/images/registration.png' http://myserver/xmltest/curlupload.php 

但不上傳文件到服務器,即使它正在發回響應。

雖然如果我用這個命令將上傳文件併發送回響應:

curl -v -F 'filename=registration.png' -F '[email protected]/var/www/fbapp/images/registration.png' http://myserver/xmltest/curlupload.php 

但我想在捲曲--data格式本身的命令。

這是在我的服務器PHP代碼:

<?php 
$uploadpath = "images/"; 
$filedata = $_FILES['file']['tmp_name']; 
echo "filedata= ".$filedata; 
if ($filedata != '') 
copy($filedata,$uploadpath."1.png"); 
echo "success"; 
?> 

這是標題的響應,我找回:

> POST /xmltest/curlupload.php HTTP/1.1 
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: myserver 
> Accept: */* 
> Content-Length: 44 
> Content-Type: application/x-www-form-urlencoded 
> 
* upload completely sent off: 44out of 44 bytes 
< HTTP/1.1 200 OK 
< Date: Thu, 06 Nov 2014 07:01:56 GMT 
< Server: Apache 
< Vary: Accept-Encoding 
< Transfer-Encoding: chunked 
< Content-Type: text/html 
< 
* Connection #0 to host myserver left intact 
* Closing connection #0 
filedata= success 

如何使用捲曲--data上傳文件?

+0

可能重複請求通過CURL文件指定的數據](http://stackoverflow.com/questions/6408904/how-to-send-post-request-with-data-specified-in-file-via-curl) – Jens 2014-11-06 07:20:20

回答

7

你通常不能簡單地選擇-F或-d(--data)。將接收您的文章的Web服務器需要其中一種格式。如果您嘗試提交的表單使用'multipart/form-data'類型,那麼只有您必須使用-F類型。如果不是,則應該使用-d,然後導致類型爲'application/x-www-form-urlencoded'的發佈。

帶-F的multipart/formposts使用特殊格式的帖子,Mime-headers分隔不同的部分,每個部分都有自己的標題集。

-d只是發送給服務器解釋/解碼的原始數據。

提到curl FAQ

(但既然你寫在這種情況下的PHP代碼,你就必須決定要接受,然後讓你的curl命令行中使用的是哪個POST方法。)如何發送POST的

+1

「你可以不要簡單地選擇-F或-d(--data)在你選擇的地方「 - 因爲他可以修改他的PHP代碼,他可以。 – 2015-07-31 11:17:43