Laravel

Quillの画像をAWS S3にアップロードする方法【Laravel】

この記事では、LaravelプロジェクトでQuillの画像をS3(Amazon Simple Storage Service)にアップロードする手順を解説します。

AWS S3の設定

AWS S3を使用するためには、まずAWSアカウントを作成し、S3のバケットを作成する必要があります。AWSの公式ドキュメントに従って、バケットの作成と必要な権限設定を行いましょう。

Amazon S3アカウントの作成と認証情報の取得

AWS S3にアクセスするためには、アクセスキーとシークレットキーが必要です。IAMユーザーを作成し、アクセスキーを取得しましょう。

Laravelプロジェクトの設定

取得したアクセスキーとシークレットキーをLaravelプロジェクトの.envファイルに設定します。

AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=your_s3_region
AWS_BUCKET=your_s3_bucket_name


 

AWS SDKのインストール

AWS S3を操作するためにはAWS SDKを導入する必要があります。composerを使用してAWS SDKをインストールします。

composer require aws/aws-sdk-php


 

マイグレーションファイルの作成

画像情報を保存するためのマイグレーションファイルを作成します。

php artisan make:migration create_quill_images_table --create=quill_images


 

作成したマイグレーションファイルに画像の情報を保存するカラムを追加します。

public function up()
{
    Schema::create('quill_images', function (Blueprint $table) {
        $table->id();
        $table->string('file_name');
        $table->string('url');
        $table->timestamps();
    });
}


 

モデルの作成

作成したマイグレーションファイルに対応するモデルを作成します。

php artisan make:model QuillImage


 

コントローラーの作成

画像のアップロードを処理するコントローラーを作成します。

php artisan make:controller QuillImageController


 

コントローラーに画像アップロードのロジックを追加します。AWS SDKを使ってS3に画像をアップロードし、データベースに画像の情報を保存します。

以下は、AWS SDKを使ってS3に画像をアップロードするPHPの実装例です。このコードはコントローラー内で使用するものと想定しています。

use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Illuminate\Http\Request;

class QuillImageController extends Controller
{
    public function uploadImage(Request $request)
    {
        // リクエストから画像ファイルを取得
        $imageFile = $request->file('image');

        // 画像ファイルの拡張子を取得
        $extension = $imageFile->getClientOriginalExtension();

        // S3に保存するファイル名を生成
        $fileName = time() . '.' . $extension;

        // S3クライアントの初期化
        $s3Client = new S3Client([
            'region' => env('AWS_DEFAULT_REGION'),
            'version' => 'latest',
            'credentials' => [
                'key' => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
            ]
        ]);

        // S3に画像をアップロード
        try {
            $result = $s3Client->putObject([
                'Bucket' => env('AWS_BUCKET'),
                'Key' => $fileName,
                'Body' => fopen($imageFile->path(), 'rb'),
                'ACL' => 'public-read' // 画像を公開設定でアップロード
            ]);

            // S3にアップロードした画像のURLを取得
            $imageUrl = $result['ObjectURL'];

            // 画像情報をデータベースに保存
            QuillImage::create([
                'file_name' => $fileName,
                'url' => $imageUrl
            ]);

            // 成功時の処理やレスポンスを返す
            return response()->json([
                'status' => 'success',
                'message' => '画像がアップロードされました。',
                'image_url' => $imageUrl
            ], 200);
        } catch (AwsException $e) {
            // エラー時の処理やレスポンスを返す
            return response()->json([
                'status' => 'error',
                'message' => '画像のアップロードに失敗しました。',
                'error' => $e->getMessage()
            ], 500);
        }
    }
}


 

この例では、uploadImageメソッド内で画像のアップロードとデータベースへの情報保存を行っています。AWS SDKのS3クライアントを使って、S3に画像をアップロードし、そのURLを取得しています。また、アップロードした画像は公開設定になっているため、URLを直接利用することができます。

注意: 実際のコードでは適切なバリデーションやエラーハンドリング、セキュリティ対策を含める必要があります。また、環境変数の取得方法はLaravelの設定に依存していますので、実際のプロジェクトに合わせて適切な方法で環境変数を取得してください。

 

まとめ

この記事では、AWS S3のセットアップからLaravelプロジェクトの設定、LaravelアプリケーションでQuillの画像をAWS S3にアップロードする方法を解説しました。

▼HTML/CSS/JavaScriptの学習本を探してる方はこちらの記事をどうぞ

2023年版 Webコーディングにオススメの学習本【HTML/CSS/JavaScript】この記事では、初心者から中級者以上まで、Webコーディングの学習にオススメの学習本をご紹介します。この記事で紹介する本は、分かりやすい解説や実践的な例題、デザインや解説図など、学習をサポートするいろんな要素が含まれている本を選びました。ぜひ、自分に合った本を見つけて、ウェブ制作のスキルを磨いてみてください。...

 

ABOUT ME
りん
QA 1年 / Webデザイナー 2年 / SE 2年 / フリーランスSE 1年 / SE人事・開発PM 半年 / 沖縄から福岡に移住3年目 / 趣味や好きなことをブログにまとめてます