首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP POST API未收到文件

PHP POST API未收到文件
EN

Stack Overflow用户
提问于 2019-05-19 10:16:52
回答 1查看 165关注 0票数 0

我们的团队正在开发一个用PHP远程访问3D打印机的web应用程序。我们尝试使用多部分/表单数据实现POST print_job部件,但它不起作用,显示未收到任何文件。此API将检查id和密钥。下面是代码。如有任何帮助,我们不胜感激!

它运行在Apache 2.4.39,PHP 7.3.5,XAMPP控制面板3.2.2上。

详细信息如下:

代码语言:javascript
复制
<?php
function callAPI($method, $url, $data){
  $curl = curl_init();

  switch ($method){
     case "POST":
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_POST, 1);
        if ($data)
           curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        break;
     case "PUT":
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        if ($data)
           curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                               
        break;
     default:
        if ($data)
           $url = sprintf("%s?%s", $url, http_build_query($data));
  }
  $username = "";
  $password = "";
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
  curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password); 
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($curl, CURLOPT_TIMEOUT, 90);
  curl_setopt($curl, CURLINFO_HEADER_OUT, true);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);


  // EXECUTE:
  $result = curl_exec($curl);
  if(!$result){die("Connection Failure");}
  curl_close($curl);
  return $result;
}
?>



<?php
include('api.php');

$_SESSION['ip'] = "";
$_SESSION['url'] = "http://".$_SESSION['ip']."/api/v1";

$target_dir = "../uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"], $target_file); 
$filedata = $_FILES["file"]["tmp_name"];
echo $target_file;
$data_array =  array(
  "jobname" => "file",
  "file" => "new \CURLFile(realpath($filedata))"
);
$_SESSION['size'] = $_FILES['file']['size'];
//$make_call = callAPI('POST', $_SESSION['url']."/print_job", $data_array);
$response = callAPI('POST', $_SESSION['url']."/print_job", $data_array);
$_SESSION['print'] = $response;
header('location: ../index.php');
?>

Ps:如果我想上传从前端获得的文件到远程API,我可能必须将其存储在本地。然后我像下面的代码一样试了试。它起作用了。

代码语言:javascript
复制
file_put_contents("E:/xyz/test.gcode",file_get_contents("../uploads/".$_FILES["file"]["name"]));
$filedata='E:/xyz/test.gcode';
if(!is_readable(realpath($filedata))){throw new \RuntimeException("upload file not readable!");}

$data_array =  array(
  'jobname' => 'file',
  'file' => new \CURLFile($filedata)
);
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56204248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档