2016-02-23 38 views
1

我正尝试使用PHP/Curl将我的网站上的头像图像发布到pipedrive。文档需要多部分/表单数据编码。我似乎无法得到实际的文件发布。我尝试了几种方法从各种操作方法发送文件,但每次pipedrive都返回“无附加文件”。我在下面贴了我目前的尝试,有什么想法?或者,也许只是指向一个可行的例子?如何使用PHP/Curl将文件发布到restful api?

$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
  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尚未初始化。

+0

谢谢。我没有正确传递文件。当我将CURLFile()归类时,它工作得很好。 $ params数组在另一个类中定义并传递给我的curl包装器。我应该把它放在上面,对于混淆抱歉。 – user2626294

相关问题