今回はLaravelからAws S3へ画像アップロードを説明します。実際によく使われる部分なので
少しでも役に立てたなら嬉しいです!
前提条件:
AWS S3でユーザ登録とバケットの作成ができていること!
「flysystem-aws-s3-v3」パッケージを使用しますので、以下のコマンドを実行してインストールします。
composer require league/flysystem-aws-s3-v3
ファイルシステムの設定を編集しますが、Laravel8 では不要のこと!
● config/filesystems.php
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
//以下を追加
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
],
],
次は環境変数の設定を編集します。プロジェクト直下にある「.env」ファイルを以下のように編集します。
AWS_ACCESS_KEY_ID= {AWSで作成したACCESS_KEY_I}
AWS_SECRET_ACCESS_KEY= {AWSで作成したSECRET_ACCESS_KEY}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={作成したバケット名}
これで必要な設定が終わりです。Laravel側の実装を進みましょう。。。。。
S3アップロードを中心しますので、DB登録までは行かないです。
アップロード処理
<?php
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Log;
class UploadController extends Controller
{
/**
* S3に画像アップロード
* @param $img
*/
public function imageUpload(Request $request)
{
//リクエストから画像の取得
$image = $request->file('main_img');
//オリジナル名で画像の保存
$name = $image->getClientOriginalName();
//S3へアップロード
$image->storeAs('/public/main_img', $name);
$main_path = Storage::disk('s3')->putFileAs('/image/upload/main_img', $image, $name, 'public');
// アップロードした画像のパスを取得 「S3パスをDB登録の場合これを使用」
$path = Storage::disk('s3')->url($main_path);
//画像パスをログ出してみましょう
Log::debug("Image link from s3 : ".$path);
}
}
これでS3へ画像アップロードが完成です。実際にアップロードしてみてS3へ画像がアップロードできていることを確認してください
思ったより簡単にできたよね!最後まで読んでくれてありがとう!!!!