2013-02-27 106 views
1

这是我在process.php(CURL,PHP)使用PUT请求上传文件,如何处理?

parse_str(file_get_contents("php://input"),$upload_data); 
if (isset($upload_data)) { 
    print_r($upload_data); 
    exit; 
} 

这是使用curl我如何查询服务器。

[email protected]:~$ curl -X PUT -H "X-TOKEN: test123" -F [email protected]/home/weldan/Pictures/Cool-Pictures1.jpg http://host.tld/process.php 
Array 
(
    [------------------------------22031b6e799c 
Content-Disposition:_form-data;_name] => "filedata"; filename="Cool-Pictures1.jpg" 
Content-Type: image/jpeg 

��� 
) 

这样,我知道那里有上传的文件。

目前的问题是,我如何处理这个文件像$ _FILES变量?

打开其他方式来实现这一点。

谢谢

回答

0

$ _FILES数组被填充到PUT请求上。这是因为一个PUT请求会指定URL中的文件名和正文中的文件内容。而已。

您必须按照您的建议使用php://input

upload.php的

<?php 
/* PUT data goes to php://input */ 
echo file_get_contents("php://input"); 

然后使用下面的curl命令行:使用--upload选项应该满足你的需求:评论后

curl --upload -H "X-TOKEN: test123" a.txt http://localhost/upload.php 

更新。不同于-X PUT加上-F,数据会被原始发送并且得到而不是 multipart/form-data encoded ..其中一个隐藏的curl的宝藏;)

+0

所以这就是它的样子: '------------------------------ 7bb0791da128 Content-Disposition:form-data; NAME = “FILEDATA”; filename =“test.txt” Content-Type:text/plain test 123 ----------------------------- -7bb0791da128 - '也许这就是为什么上传的图像文件无法查看。它有额外的字符串。 – 2013-02-27 09:36:32

+0

是:)我在测试过程中意识到这一点:)但重要的是第一句话。它更多的是关于HTTP协议的性质而不是PHP的问题。使用PUT请求可以只有一个文件,因此不需要$ _FILES数组。 **进一步注意围绕-F参数的双引号。没有他们它不会工作** – hek2mgl 2013-02-27 09:37:43

+0

是的。做了建议。我认为我们在服务器端获得的还是原始的二进制数据。如果我将它存储为filename.txt我仍然看到额外的字符串,我想要做的是..我想将数据存储在临时文件中,所以我可以检查它的类型,在我的情况下我想要图像文件。所以你的回答实际上很有帮助,但并没有解决问题。还在搞清楚该怎么做。谢谢 – 2013-02-27 10:14:27