🙆

Laravel6.x + Heroku + Cloudinaryを使用しての画像ファイルのアップロード

2022/02/17に公開

Herokuにデプロイ後、アップロードの画像取り扱いで困ることが多々あります。
そこでCloudinary(画像を管理するクラウドサービス)を利用しての設定を形にしていきます。

Cloudinaryの登録は割合で。。。

LaravelにCloudinaryをインストール

composerで、cloudinary-laravelをインストールします

composer require cloudinary-labs/cloudinary-laravel

memo:
dockerで環境構築を行なっているとPHP Fatal error: Allowed memory size of 1610612736 bytes exhausted〜〜のエラーが見受けられる場合がある。
原因はメモリー不足

COMPOSER_MEMORY_LIMIT=-1 composer require cloudinary-labs/cloudinary-laravel

config/app.phpに追加

config/app.phpに必要項目を追加します。config/app.phpは何かを追加する度、書き加えるファイルなので分かりやすく記入した方が良いかもです。

app.php
'providers' => [
    // 追加
    CloudinaryLabs\CloudinaryLaravel\CloudinaryServiceProvider::class,
],

'aliases' => [
// 追加
    'Cloudinary'=>CloudinaryLabs\CloudinaryLaravel\Facades\Cloudinary::class,
    'CloudinaryUpload' => app\Library\CloudinaryUpload::class,
]

vendor/cloudinary-labs/cloudinary-laravel/config/cloudinary.php を /config/cloudinary.php にコピー

CLIでファイルを移動します。上手くいけばLaravelのconfigフォルダにcloudinary.phpが出来るはずです。

php artisan vendor:publish --provider="CloudinaryLabs\CloudinaryLaravel\CloudinaryServiceProvider" --tag="cloudinary-laravel-config"

CloudinaryのAPIキーをHeroku環境変数へ入力

CLIで入力

heroku config:set CLOUDINARY_API_KEY=
heroku config:set CLOUDINARY_API_SECRET=
heroku config:set CLOUDINARY_CLOUD_NAME=

※Herokuのダッシュボードに直接入力しても可
Heroku: ログイン→ダッシュボード→setting→Config Vars 「Reeal configure Vars]ボタン

ここまでで設定は、完了できると思います。

Laravel コントローラ

LaravelのControllerにClass Cloudinaryを使用してアップロードしていきます。

hogeController.php
use CloudinaryLabs\CloudinaryLaravel\Facades\Cloudinary; //必ず必要
~~~~
public function Hoge(Request $request)
{
  $file = $request->file( 'item_img' ); //file取得
  if( !empty( $file ) ) {
    $upload = Cloudinary::upload ( $file->getRealPath(), [
    // ここの設定は各々で数値をいじって下さい
        "height" => 800,
        "width" => 560,
        "crop" => "fit",
        "border" => "20px_solid_rgb:ffffff",
        "quality" => "auto",
        "fetch_format" => "auto",
    ]);
  }
}

これでCloudinaryにアップロードは出来ます。
後は各自で準備したDBにCloudinaryから発行される画像ID,画像puthを保存していきます。

hogeController.php
$books = new Book;
$book->item_url = $update->getSecurePath(); //img pathを取得
$book->item_id = $update->getPublicId(); // img idを取得

ここまで出来たら、Cloudnaryのダッシュボード, ご自分で用意されたDBで確認してみて下さい。
画像がCloudinayにアップロード, DB保存が思い通りに出来た時の感動を味わいましょう!

追記:
Cloudinaryでアップロードする際のlaravel、Controllerの記述ですが、自分で数値を弄りながら設定の数値を決めていきました。
Cloudinary_Edit画面から(ダッシュボード保存した画像右上 縦点→「edit」)

->getSecurePath(), ->getPublicId()以外はこちらを参考にして下さい。
https://github.com/cloudinary-labs/cloudinary-laravel

最後に...

Cloudinary等中々資料がない場合、投げ出したくなる気持ちになってしまいます。
それでも、粘り強く探し自分なりの答えを探し出した時の感動は、「嬉しい」の一言に尽きますね。

Cloudinary始めクラウドサービスには様々なサービスがありますので、今後色々と試し実際に動かし自分自身で体験できたら、また形に残していこうと思います。

Discussion