2

这就是我在 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 变量一样处理这个文件?

也开放其他方式来实现这一目标。

谢谢

4

2 回答 2

0

在 PUT 请求上填充 $_FILES 数组。这是因为 PUT 请求会在 url 中指定文件名,在正文中指定文件内容。而已。

您必须php://input按照您已经建议的方式使用。

上传.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 不同的是,数据将被原始发送并且不会被多部分/表单数据编码.. curl 的隐藏宝藏之一;)

于 2013-02-27T08:07:17.873 回答
0

简短的回答

在您的情况下,唯一的方法是手动解析原始请求(看看这个要点

想法

  • PUT 请求只能用于上传一个文件(不是来自 html 上传表单,而是使用自定义请求)。在服务器上,您只需获取原始文件内容并将其写入某个文件。
  • 使用不带文件的 PUT (application/x-www-form-urlencoded) 并使用解析原始请求parse_str(file_get_contents("php://input"), $_PUT);
  • 使用 POST 上传文件(multipart/form-data)。
于 2020-10-23T06:37:29.230 回答