我正在构建我的第一个REST Api,到目前为止一切顺利,我只是通过PUT
请求方法遇到文件上传问题。我需要成为PUT
,因为我正在从iOS应用更新用户及其头像,而PUT专门用于更新请求。
因此,当我PUT
和文件上传时,$_FILES
数组实际上是空的,但是当我打印PUT
数据时
parse_str(file_get_contents('php://input'), $put_vars);
$data = $put_vars;
print_r($data);
我收到以下回复;
Array
(
[------WebKitFormBoundarykwXBOhO69MmTfs61
Content-Disposition:_form-data;_name] => \"avatar\"; filename=\"avatar-filename.png\"
Content-Type: image/png
�PNG
)
现在我并不真正理解这个PUT
数据,因为我不能像数组或任何东西那样访问它。所以我的问题是如何从PUT
数据访问上传的文件?
感谢您的帮助。
答案 0 :(得分:5)
PHP支持某些客户端用于在服务器上存储文件的HTTP PUT方法。 PUT请求比使用POST请求的文件上传简单得多,它们看起来像这样:
PUT /path/filename.html HTTP/1.1
以下代码位于official PHP documentation,用于通过PUT上传文件:
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>
答案 1 :(得分:0)
PHP手册中有一个例子:File Upload: PUT Method。
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>