Laravel+Cloudinaryで画像アップロードする

背景

herokuで運用しているWebサービスに画像のアップロード機能を追加するというミッションが課せられたので「とりあえずS3でいっか!」とする前に、herokuアドオンにあったClodinaryを調査を兼ねて試用してみました。

環境

laravel5.3 (PHP7.1.2)

インストー

※heroku側のアドオン追加などは割愛します。

今回はCloudderというCloudinaryのライブラリをlaravel向けにラップしている、

アプリケーションを使いました。

github.com

composerでinstallします。

composer require jrm2k6/cloudder:0.4.*

composer.json

"require": {

    …

    "jrm2k6/cloudder": "0.4.*"

},

設定

インストールするとcloudder.configが生成されるのですが、

f:id:pdo99:20170614123743p:plain

 という感じなので、デフォルトのoptionはココで書いて、key等は.envファイル設定します。※optionについては後述

.env

CLOUDINARY_API_KEY=****

CLOUDINARY_API_SECRET=****

CLOUDINARY_CLOUD_NAME=****

 keyはダッシュボード参照。

f:id:pdo99:20170614124329p:plain

 

次にLaravel内で使えるように設定しますが、

gitの説明通りのだとLaravelのバージョンが違うので5.3.*では以下のように書きます。

app.conf

'providers' => [

    JD\Cloudder\CloudderServiceProvider::class

],

'aliases' => [

    'Cloudder' => JD\Cloudder\Facades\Cloudder::class

]

設定は以上です。

使ってみる 

適当にtestを作って試しました。

testなんで書きませんでしたが、Controllerで使う際にはuseします。

use JD\Cloudder\Facades\Cloudder;

 uploadとレスポンス確認

Cloudder::upload('http://res.cloudinary.com/demo/image/upload/w_250,h_168,c_fit/sample.jpg', '');

var_dump(Cloudder::getResult());

 URLでもpublic内の画像のファイルパスでもいけます。

レスポンスはこんな感じ。

f:id:pdo99:20170614132243p:plain

なにも指定しないとそのままアップロードされます。

option 付けるver

Cloudder::upload($imagePath, '',

                array("width"=>150, "height"=>150, "crop"=>"fill", "format" => "png", "gravity" => "center"),

                [‘test_image’, blog’]);

こんな感じでいけます。

指定できるoptionの種類はかなりあります。

↓公式doc

cloudinary.com

公式docをみるとやっぱりCloudder楽そうだな〜ってなるかなって思います。

実際インストールもcomposer一発なのでおすすめ。

まとめ

使ってみると思ってた以上に簡単。

画像取得optionはupload時にも、url取得時にも指定できて調査を忘れて楽しめます()

実用面ではS3をすでに使っていて更に有料でこっちもってなるとどうでしょうか、という感じがします。

まあheroku使っててAddOn余ってて〜って感じならワンチャンあるのではないでしょうか◎