2009-07-15 60 views
3

我正在使用Amazon AIMS API上傳清單文件,並且在上傳文件的cURL調用時遇到問題。文檔非常有限,所以沒有示例代碼可以幫助解決這個問題。如何使用PHP cURL XML調用附加文件

這是我迄今爲止捲曲呼叫:

// $FILENAME is filename of the CSV file being uploaded: 

$inventory = fopen($FILENAME, 'r') or die("Can't open file!"); 
echo $inventory; 

curl_setopt($ch, CURLOPT_URL, $URL); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_INFILE, $inventory); 
curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename)); 
curl_setopt($ch, CUROPT_PUT, TRUE); 


$response = curl_exec($ch); 
curl_close($ch); 

我嘗試把$庫存到CURLOPT_POSTFIELDS和不具有INFILE,但我得到了同樣的錯誤。

在XML響應中,我得到「NO_FILE_ATTACHED」,所以明顯的問題是將文件附加到XML調用。

我也嘗試上傳作爲第一響應者說在php.net的curl_setopt頁面上使用示例#2。

對於這一點,我用下面的代碼:

$data = array('@/tmp/amazon_export.csv'); 

curl_setopt($ch, CURLOPT_URL, $URL); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 


$response = curl_exec($ch); 
curl_close($ch); 

我得到了相同的NO_FILE_ATTACHED響應返回。

任何想法?

回答

3

這個工作對我來說:

$hCurl = curl_init(); 
curl_setopt($hCurl, CURLOPT_PUT,   true); 
curl_setopt($hCurl, CURLOPT_HEADER,   true); 
curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, CURL_TIMEOUT_SECS); 
curl_setopt($hCurl, CURLOPT_URL,   "$oMessage->url/att/$fid"); 
curl_setopt($hCurl, CURLOPT_HTTPHEADER,  $aCurlHeaders); 
// TODO it could be possible that fopen() would return an invalid handle or not work altogether. Should handle that 
$fp = fopen ($finfo['tmp_name'], "r"); 
curl_setopt($hCurl, CURLOPT_INFILE,   $fp); 
curl_setopt($hCurl, CURLOPT_INFILESIZE,  $finfo['size']); 

$sResp = curl_exec($hCurl); 
0

您在單個捲曲操作中合併PUTPOST,這不起作用。有關如何使用POST上傳文件的示例,請參閱curl_setopt手冊頁的example #2

+0

我仍然得到相同的NO_FILE_ATTACHED錯誤,而不是: $ data = array('@/tmp/amazon_export.csv'); curl_setopt($ ch,CURLOPT_URL,$ URL); curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ ch,CURLOPT_POST,1); curl_setopt($ ch,CURLOPT_POSTFIELDS,$ data); 這是在這個例子中。 – 2009-07-15 23:46:47

0

你有$文件名和$文件名,文件大小調用應該在你的情況下,文件大小($文件名)...

希望這就是幫助