2016-02-23 36 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

相關問題