< back to top
avatar

Ryotaro Tsuda

phpを使ってimagekit.ioにREST API経由でbase64形式の画像をアップロードする

2021年1月15日(金) 7時46分53秒

はまったので忘備録

公式によると以下curlコマンドで画像アップができます。

curl -X POST "https://upload.imagekit.io/api/v1/files/upload"    \
-u your_private_api_key: \
-F 'file=iVBORw0KGgoAAAAN' \
-F 'fileName=hoge.png' 


PHPで書き直すと以下のようになります

$POST_DATA = array(
      'file' => 'iVBORw0KGgoAAAAN',
      'fileName' => "hoge.png",
    );
    $curl=curl_init("https://upload.imagekit.io/api/v1/files/upload");   
    curl_setopt($curl,CURLOPT_POST, TRUE);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_USERPWD, $imagekit_privatekey.":");
    curl_setopt($curl,CURLOPT_COOKIEJAR,      'cookie');
    curl_setopt($curl,CURLOPT_COOKIEFILE,     'tmp');
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE);
    
    $output= curl_exec($curl);

crulの-uコマンドになじみがなくてよくわからなかったのですがどうやらこれはbasic認証らしいです。
phpのcurlでbasic認証を通す場合はcurl_setopt($curl, CURLOPT_USERPWD, $imagekit_privatekey.":");のように記述します

またこの記事同様デフォルトでランダム文字列が入ってしまうのですが、外す場合にはuseUniqueFileNameをfalseにする必要があります

ただ、今回はmultipart/form-dataでの送信のため、http-build-queryなどを通さず、直接送信しているため

$POST_DATA = array(
      'file' => 'iVBORw0KGgoAAAAN',
      'fileName' => "hoge.png",
      'useUniqueFileName' => false
);

とすると、正しく動作しません。

正確には

$POST_DATA = array(
      'file' => 'iVBORw0KGgoAAAAN',
      'fileName' => "hoge.png",
      'useUniqueFileName' => 'false'
);

と文字列リテラルで渡す必要があります。

これで正しくアップロードできます