2014-11-06 78 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