使用 REST 在 php 中上传文件

Posted

技术标签:

【中文标题】使用 REST 在 php 中上传文件【英文标题】:Upload Files in php using REST 【发布时间】:2013-03-24 10:47:03 【问题描述】:

有没有办法使用 REST 使用 php 将文件从客户端上传到服务器,

我正在尝试使用下面的代码,但它对我不起作用。

<?php

$file_to_upload = array('file_contents'=>'@c:\\test.txt');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/api/upload.php');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSER, TRUE);
curl_setopt($ch, CURLOPT_UPLOAD, TRUE);
curl_setopt($ch, CURLOPT_POST,TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload);
 curl_exec($ch) or die( curl_error($ch) );
$error = curl_error($ch);
curl_close ($ch);
echo " Server response: ".$result;
echo " Curl Error: ".$error;

?>

还有我的upload.php

$uploaddir = realpath('./') . '/';
$uploadfile = $uploaddir . basename($_POST['file']['name']);

echo $uploadfile;
echo "\n";
echo '<pre>';
echo $_POST['file']['tmp_name'];
       if (move_uploaded_file($_POST['file']['tmp_name'], $uploadfile)) 
           echo "File is valid, and was successfully uploaded.\n";
        else 
           echo "Possible file upload attack!\n";
       
       echo 'Here is some more debugging info:';

      print_r($_FILES);
       echo "\n<hr />\n";
       print_r($_POST);
print "</pr" . "e>\n";
?>

【问题讨论】:

我认为您应该寻找 $_FILES['file_contents'] 而不是 $_POST['file'] 啊,我明白了,谢谢 【参考方案1】:

php5.5+

$filePath = $_FILES['file_upl']['tmp_name'];
$type=$_FILES['file_upl']['type'];
$fileName = $_FILES['file_upl']['name'];
    
$data = array('file_upl' => curl_file_create($filePath, $type, $fileName));

$ch = curl_init();     
curl_setopt($ch, CURLOPT_URL, 'http://localhost/api/upload.php');
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: multipart/form-data'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);

【讨论】:

【参考方案2】:

我认为您应该寻找 $_FILES['file_contents'] 而不是 $_POST['file']。 – user1190992

【讨论】:

【参考方案3】:

试试这个。

index.php

<?php
    echo "<pre>";
    print_r($_FILES);
    error_reporting(9);
    if($_REQUEST['action'] == 'submit') 
        $ch = curl_init();
        $filePath = $_FILES['file_upl']['tmp_name'];
        $fileName = $_FILES['file_upl']['name'];
        $data = array('name' => 'Foo', 'file' => "@$filePath", 'fileName' =>$fileName);             
        curl_setopt($ch, CURLOPT_URL, 'http://www.restServiceHost.com/file3/upload.php');
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_exec($ch);
        curl_close($ch);
    
?>

<form name="file_up" action="" method="POST" enctype="multipart/form-data">
Upload your file here
<input type="file" name="file_upl" id="file_upl"/>
<input type="submit" name="action" value="submit"/>
</form>

并在http://www.restServiceHost.com/file3中上传.php

<?php
    echo "<pre>";
    echo 'in upload.php<br/>';
    print_r($_FILES);
    print_r($_REQUEST);
    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_REQUEST["fileName"]);
?>

【讨论】:

以上是关于使用 REST 在 php 中上传文件的主要内容,如果未能解决你的问题,请参考以下文章

使用kbmmw 的REST 服务实现上传大文件

文件上传的 REST 设计 [关闭]

在 JAVA 中使用 Rest API 客户端上传文件

在 Spring Boot REST API 中上传文件

使用 AFNetworking 将 .zip 文件上传到 REST 服务器失败

如何使用 Alfresco Rest API 在文档中上传文件夹和子文件夹?