1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelを使ってAWS「 S3」へ画像アップロード

Last updated at Posted at 2022-02-20

今回はLaravelからAws S3へ画像アップロードを説明します。実際によく使われる部分なので
少しでも役に立てたなら嬉しいです!:girl_tone1:

前提条件:
 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);
    }
}

Screen Shot 2022-02-20 at 21.26.57.png

これでS3へ画像アップロードが完成です。実際にアップロードしてみてS3へ画像がアップロードできていることを確認してください:clap:
思ったより簡単にできたよね!最後まで読んでくれてありがとう!!!!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?