Как я могу прикрепить файл с помощью PHP cURL XML Call - PullRequest
3 голосов
/ 16 июля 2009

Я использую API Amazon AIMS для загрузки файла инвентаризации, и у меня возникла проблема с вызовом cURL для загрузки файла. Документация очень ограничена, поэтому нет примера кода, который бы помог в этом.

Это то, что я до сих пор говорил о вызове cURL:

// $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.

Я также попытался загрузить, как сказал первый респондент, используя пример №2 на странице curl_setopt в php.net.

Для этого я использовал следующий код:

$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 ]

3 голосов
/ 19 июля 2009

Это работает для меня:

$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 голосов
/ 19 августа 2009

у вас есть $ filename и $ FILENAME, вызов размера файла должен быть в вашем случае размер файла ($ FILENAME) ...

Надеюсь, это поможет

0 голосов
/ 16 июля 2009

Вы объединяете PUT и POST в одну операцию скручивания, которая не будет работать. См. пример # 2 страницы руководства curl_setopt для примера того, как загрузить файл, используя POST.

...