Laravel6.x + Heroku + Cloudinaryを使用しての画像ファイルのアップロード
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
は何かを追加する度、書き加えるファイルなので分かりやすく記入した方が良いかもです。
'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
を使用してアップロードしていきます。
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
を保存していきます。
$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()
以外はこちらを参考にして下さい。
最後に...
Cloudinary等中々資料がない場合、投げ出したくなる気持ちになってしまいます。
それでも、粘り強く探し自分なりの答えを探し出した時の感動は、「嬉しい」の一言に尽きますね。
Cloudinary始めクラウドサービスには様々なサービスがありますので、今後色々と試し実際に動かし自分自身で体験できたら、また形に残していこうと思います。
Discussion