如何使用PHP/Curl到post一个文件到restfulapi?

How to use PHP/Curl to post a file to restful api?

我正在尝试使用 PHP/Curl 从我的网站 post 头像图像到 pipedrive。文档需要 multipart/form-data 编码。我似乎无法将实际文件获取到 post。我已经尝试了几种方法来从各种操作方法发送文件,但每次都是 pipedrive returns "no file attached"。我在下面粘贴了我当前的尝试,有什么想法吗?或者也许只是给我指出一个可行的例子?

$ch = curl_init();
$timeout = 10;
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_INFILESIZE, $params['filesize']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER,
   array('Content-Type:multipart/form-data')
);
$data = curl_exec($ch);

$params = array(
    'id' => $PDid,
    'file' => plugin_dir_path( dirname( __FILE__ )).'tmp/'.$filename,
    'filesize' => filesize(plugin_dir_path( dirname( __FILE__ )).'tmp/'.$filename)
);
  1. 您需要在脚本顶部设置 $params 变量,然后再使用它。在底部对你没有好处。

  2. 阅读 CURLFile 的文档并按照其中的示例进行操作。

具体来说,您应该像这样设置相关的文件选项:

// Create a CURLFile object
$cfile = new CURLFile('cats.jpg','image/jpeg','test_name');

// Assign POST data
$params = array('test_file' => $cfile);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

在您发布的代码中,您似乎遗漏了 CURLOPT_POST。你的 CURLOPT_POSTFIELDS 没有工作,因为正如我所说 $params 还没有被初始化。