質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1538閲覧

Laravel8 AWS(S3)への画像の保存をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/02/04 03:43

編集2021/02/04 07:26

AWSのS3に画像を保存できるようにしたい

DockerでLaravelの開発環境を構築し、投稿機能のついたサイトを作成しています。
投稿を保存するところで詰まっているのでご教授いただけましたら幸いです。
初心者のため、どこが間違っているのかもよく分からないのですがよろしくお願い致します。

こちらの記事を参考に実装しています。

イメージ説明

整えていない見えにくい状態で申し訳ありません。
このformで入力し「登録する」を押したところエラーが発生致しました。

発生している問題・エラーメッセージ

Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found

イメージ説明

該当のソースコード

composer require league/flysystem-aws-s3-v3でインストールしました。
composer.jsonに下記のように記載されているのでインストールはできていると思います。

composer.json

1"league/flysystem-aws-s3-v3": "^2.0"

config/filesystems.phpには以下のように記載致しました。

'cloud' => env('FILESYSTEM_CLOUD', 's3'), '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'), ],

.envにも環境変数を設定致しました。

AWS_ACCESS_KEY_ID=< > AWS_SECRET_ACCESS_KEY=< > AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=< >

以下がマイグレーションファイルの記述内容です

public

1 { 2 Schema::create('games', function (Blueprint $table) { 3 $table->id(); 4 $table->bigInteger('user_id'); 5 $table->string('name'); 6 $table->text('describe'); 7 $table->integer('play_time'); 8 $table->integer('players_minimum'); 9 $table->integer('players_max'); 10 $table->string('image_path')->nullable(); 11 $table->timestamps(); 12 }); 13 }

以下がモデルの記述内容です

Game.php

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Game extends Model 9{ 10 use HasFactory; 11 12 protected $table = "games"; 13 protected $fillable = [ 14 "id", 15 "user_id", 16 "name", 17 "describe", 18 "play_time", 19 "players_minimum", 20 "players_max", 21 "file_name", 22 "file_path", 23 "updated_at", 24 "created_at", 25 ]; 26 27 public function user() 28 { 29 return $this->belongsTo(User::class); 30 } 31}

以下がコントローラーの記述内容です

/** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('game.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $input = $request->only('user_id', 'name', 'describe', 'play_time', 'players_minimum', 'players_max', 'file_name', 'file_path'); $game = new Game(); $game->user_id = Auth::id(); $game->name = $input["name"]; $game->describe = $input["describe"]; $game->play_time = $input["play_time"]; $game->players_minimum = $input["players_minimum"]; $game->players_max = $input["players_max"]; $image = $request->file('image'); $path = Storage::disk('s3')->putFile('bgame32070', $image, 'public'); $post->image_path = Storage::disk('s3')->url($path); $game->save(); return redirect('/'); }

試したこと

php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear

キャッシュのクリアを試みましたが解決しませんでした。
クラスがないというエラーなのかと思ったのですが該当のファイルにnamespaceの記載はしてありました。

補足情報(FW/ツールのバージョンなど)

Version
PHP7.4.14
Laravel8.24.0
mysql8.0.23
docker20.10.2
docker-compose1.27.4

理解が浅くいろいろな方の記事を参考にしているためご教授いただければ幸いです。
よろしくお願い致します。

追伸

イメージ説明

composer require league/flysystem-aws-s3-v3:^1.0後のエラー

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/02/04 04:01

composer requireしたときになにかメッセージ出てませんでしたか? composer installで入れ直してみたらどうなりますかね
退会済みユーザー

退会済みユーザー

2021/02/04 04:39

ご返答ありがとうございます。 前回のcomposer requireはうまく行った記憶がありますが、今回composer installしてみた後に再度行ったところ、 Your requirements could not be resolved to an installable set of packages. Installation failed, reverting ./composer.json to its original content. 上記2つが赤く出てきました。
退会済みユーザー

退会済みユーザー

2021/02/04 04:40

バージョン違いとかでしょうか?
退会済みユーザー

退会済みユーザー

2021/02/04 04:49

念のため、composer updateしてから再度実行してみましたが同じエラーでした。
yu_1985

2021/02/04 06:02

それはメッセージ全文ですか?
退会済みユーザー

退会済みユーザー

2021/02/04 06:19

本文にエラーメッセージを載せさせていただきました。
guest

回答1

0

ベストアンサー

エラーの内容を素直に読み取ると
league/flysystemのバージョンが古くてleague/flysystem-aws-s3-v3の2.0以上に対応していないんじゃないでしょうか。
league/flysystem-aws-s3-v3のほうを対応しているバージョンに下げるか、league/flysystemのバージョンを上げるしかないと思います。

StackOverflowにも同様の投稿がありました。
league/flysystem-aws-s3-v3 on Laravel 8 other packages require lower version

これを見るとleague/flysystem-aws-s3-v3のアップデートがあったのが割と最近なので、こちらのバージョンを下げるべきだと思いますが…。

投稿2021/02/04 06:29

yu_1985

総合スコア7471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/04 07:24

ありがとうございます! composer require league/flysystem-aws-s3-v3:"^1.0" でうまくいきました! composer.jsonも1.0に変わりました。 勉強になりました。 別の問題も出てきたのですが Call to a member function hashName() on nullというエラーが出てきました。 今回の問題と関係ないことであれば別で質問するのですが、また追伸に載せたのでご確認いただいてもよろしいでしょうか? 別で質問した方がいいようであればその旨ご教授ください。
yu_1985

2021/02/04 07:31

この質問はLaravelからS3へ画像保存したいというのが主題ですが、すでに解決にしてしまったので別の質問を改めて立てるほうがいいでしょう。 それはそれとして、エラーメッセージは重要なヒントなので、エラーメッセージをちゃんと読むこととエラーメッセージで検索してみて同じ現象を解決したものが出てこないかぐらいは調べてみる癖をつけておくといいです。 結局、回答する側もエラーメッセージを元に調べているだけなので。
退会済みユーザー

退会済みユーザー

2021/02/04 10:45

かしこまりました。 アドバイスもありがとうございます! 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問