猿问

使用带有 php 的 chevereto api 上传图像

我正在尝试将图像从我的服务器上传到安装了 chevereto 的 img 服务器,但我无法让它工作


到目前为止,这是我的代码:


 $directory = "/var/www";

 $images = glob($directory . "/*.jpg");

foreach($images as $image)

{

  echo $image;

  $data =  base64_encode(file_get_contents($image));


  $run= shell_exec("curl --location --request POST \"http://ip/api/1/upload/?key=123456789&source=$data&format=json\"");

print_r($run);


}

收到错误:414 Request-URI Too Large


这是 api 文档: https: //chevereto.com/docs/api-v1


慕少森
浏览 236回答 1
1回答

动漫人物

您正在使用POST请求方法,但您发送的是source parameter in URL. 您的URL$data中的 是 base64 编码的,这会产生一个非常大的字符串。这就是您收到错误的原因414 Request-URI Too Large。解决方案:您应该使用相同的 POST 方法将参数更改为 JSON 正文。从您提供的文档中chevereto可以清楚地看出。API v1 调用可以使用 POST 或 GET 请求方法完成,但由于 GET 请求受 URL 允许的最大长度限制,您应该更喜欢 POST 请求方法。因此,使用 POST 方法和包含成对参数的 JSON Body key:value。这将解决问题。示例 PHP 代码:$requestData = [    'key' => 123456789,    'source' => 'base64EncodedStringHere',    'format' => 'json'];$jsonData = json_encode($jsonData);$curl = curl_init();curl_setopt_array($curl, array(  CURLOPT_URL => "http://ip/api/1/upload",  CURLOPT_RETURNTRANSFER => true,  CURLOPT_ENCODING => "",  CURLOPT_MAXREDIRS => 10,  CURLOPT_TIMEOUT => 0,  CURLOPT_FOLLOWLOCATION => true,  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  CURLOPT_CUSTOMREQUEST => "POST",  CURLOPT_POSTFIELDS => $jsonData,  CURLOPT_HTTPHEADER => array(    "Content-Type: application/json"  ),));$response = curl_exec($curl);curl_close($curl);echo $response;
随时随地看视频慕课网APP
我要回答