从最近几天开始,我在 php 中开发 CURL 请求以将文件数据发布到 API 时遇到了这个问题。
这是 CURL 请求
$ curl --request POST \
--url 'UPLOAD_URL' \
--upload-file 'PATH_TO_FILE' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
对于 PATH_TO_FILE,我已经尝试了通过网络和 stackoverflow 发布的每一种方法。
这是我的 PHP 代码
<?php
header('Content-Type: application/json');
$sheader = array('Authorization: Bearer '.$_SESSION['access_token']);
$filename = $_FILES['upload-file']['name'];
$filedata = $_FILES['upload-file']['tmp_name'];
$filesize = $_FILES['upload-file']['size'];
$filetype = $_FILES['upload-file']['type'];
if($filename != '')
{
$ch = curl_init();
$cFile = new CURLFile(realpath($filename), $filetype, 'harish.jpg');
//$cFile = '@'. realpath($filename);
$data = array('upload-file' => $cFile);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cFile);
//curl_setopt($ch, CURLOPT_POSTFIELDS, realpath($filename));
curl_setopt($ch, CURLOPT_URL, $_POST['upload_url']);
curl_setopt($ch, CURLOPT_HTTPHEADER, $sheader);
curl_exec($ch);
echo json_encode($ch);
//echo json_encode(array('filename'=>$filename, 'temp_path'=>$filedata, 'basepath'=>realpath($filename)));
} else {
echo 'There is no file selected';
}
我在网上找到的大多数解决方案是下面提到的这两个
方法 1(对于 php < 5.5)
'@'.$filepath
方法 2(对于 php > 5.5)
CURLFile($filename, $filetype, 'somefile.jpg');
或者
curl_file_create($filedata, 'image/jpeg', $filename);
以上都不适合我。我在 CURLFile 中也使用 realpath($filename) 来获取文件的绝对路径,但遗憾的是这也不起作用。