(CURL,PHP)使用PUT请求上传文件,我该如何处理?

时间:2013-02-27 07:57:20

标签: php curl upload put

这就是我在process.php中所拥有的。

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

这是我使用curl查询服务器的方式。

weldan@prindu:~$ curl -X PUT -H "X-TOKEN: test123" -F filedata=@/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变量一样处理这个文件?

也可以通过其他方式实现这一目标。

由于

2 个答案:

答案 0 :(得分:0)

在PUT请求中填充$ _FILES数组。那是因为PUT请求将指定url中的文件名和正文中的文件内容。没什么。

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

upload.php的

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

然后使用以下curl命令行:

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

评论后更新:使用--upload选项可以满足您的需求。与-X PUT和-F不同,数据将被原始发送并且多部分/表格数据编码..卷曲的隐藏宝藏之一;)

答案 1 :(得分:0)

简短答案

您遇到的唯一方法是手动解析原始请求(请查看this gist

想法

  • PUT请求只能用于上传一个文件(不是从html上传表单,而是使用自定义请求)。在服务器上,您仅获取原始文件内容并将其写入某个文件中。
  • 使用不带文件的PUT(应用程序/ x-www-form-urlencoded),并使用parse_str(file_get_contents("php://input"), $_PUT);解析原始请求
  • 使用POST上传文件(多部分/表单数据)。