无法在imgur [API 3]上传图片

时间:2018-04-24 07:22:56

标签: php curl image-uploading imgur

我正在尝试上传imgur上的图片,但我经常遇到问题,而且我无法上传图片。

在我发布的代码中,我不明白为什么我一直得到布尔值:false作为curl_exec($ch); json字符串的结果。从PHP Manual来看,这意味着帖子失败但我不明白为什么。

我在这里成功阅读了帖子请求中的图片

$imageContent = file_get_contents($myFile["tmp_name"][$i]);
if ($imageContent === false) {
    // Empty image - I never get this error
} else {
    //Image correctly read
    $url = $this->uploadLogged($imageContent);
}

虽然这是我尝试上传

public function uploadLogged($image){
    $upload_route = "https://api.imgur.com/3/image";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $upload_route);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer '.$this->access_token));
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));
    $response = curl_exec($ch);
    $responseDecoded = json_decode($response);
    curl_close ($ch);
    $link = $responseDecoded->data->link;
    if( empty($link) ){
        throw new Exception("Cannot upload the image.<br>Response: ".json_encode($response));
    }
    return $link;
}

此外$this->access_token对应有效访问令牌

1 个答案:

答案 0 :(得分:1)

当curl_exec返回bool(false)时,传输过程中出错。要获得扩展的错误描述,请使用curl_errno()和curl_error()函数。要获得更详细的传输信息,请使用curl_setopt的CURLOPT_VERBOSE和CURLOPT_STDERR选项。例如

$curlstderrh=tmpfile();
curl_setopt_array($ch,array(CURLOPT_VERBOSE=>1,CURLOPT_STDERR=>$curlstderrh));
$response = curl_exec($ch);
$curlstderr=file_get_contents(stream_get_meta_data($curlstderrh)['uri']);
fclose($curlstderrh);
if(false===$response){
   throw new \RuntimeException("curl_exec failed: ".curl_errno($ch).": ".curl_error($ch).". verbose log: $curlstderr");
}
unset($curlstderrh,$curlstderr);

应该在异常消息中为您提供libcurl error code,错误描述以及错误发生之前发生的详细日志。

常见问题包括SSL / TLS加密/解密错误,超时错误和不稳定的连接。