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

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

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

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Laravel

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

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

Q&A

解決済

1回答

1655閲覧

Amazon s3を利用し画像を保存をしたい

ttt---aaa

総合スコア21

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Laravel

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

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

0グッド

0クリップ

投稿2021/08/31 21:47

編集2021/09/02 21:05

やりたいこと

heorkuにデプロイした、LaravelアプリでAmazon s3を利用して画像を保存したいのですが、下記エラーが発生します。情報の不足などあるかと思いますが、解決に向け何かアドバイスをお願いいたします。
イメージ説明

Found 1 error while validating the input provided for the PutObject operation: [Bucket] is missing and is a required parameter

試したこと

-- ✳️S3 バケットの作成(アクセス許可全てオフ)
-- ✳️IAM作成
-- ✳️AWS SDK for PHPをインストール
-- ✳️ファイル操作用パッケージ(flysystem-aws-s3-v3)のインストール
-- ✳️Heroku上の環境変数を設定(下記項目を.envファイルに記載済み)

AWS_ACCESS_KEY_ID={AWSで作成したAccess key ID} AWS_SECRET_ACCESS_KEY={AWSで作成したSecret access key} AWS_DEFAULT_REGION={選択したリージョン名} AWS_BUCKET={作成したバケット名} AWS_URL=https://s3-{選択したリージョン名}.amazonaws.com/作成したバケット名/

-- ✳️herokuのキャッシュをクリア

言語・バージョン

-- PHP   7.3.11
-- Laravel 6.20.12

各ファイル

■config/filesystem.php
<?php return [ 'default' => env('FILESYSTEM_DRIVER', 'local'), 'cloud' => env('FILESYSTEM_CLOUD', 's3'), 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], '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'), ], ], ];
■web.php(ルート)
<?php Route::get('guest', 'Auth\LoginController@guestLogin')->name('login.guest'); Route::get('/', 'EmployeesController@index'); Route::get('/employee.search', 'EmployeesController@search')->name('employee.search'); Auth::routes(); Route::group(['middleware' => 'auth'], function () { Route::resource('index', 'EmployeesController', ['only' => ['index']]); Route::resource('employee_create', 'EmployeesController'); });
■EmployeesController.php(コントローラー)
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Employee; use App\Goods; use Illuminate\Support\Facades\Storage; class EmployeesController extends Controller { public function index() { $employees = Employee::with('goods')->paginate(10); return view('index', ['employees' => $employees, ]); } public function create() { $user =\Auth::user(); return view('employee_create'); } public function store(Request $request) { $request->validate([ 'employee_image' => 'required', 'employee_id' => 'required', 'employee_name' => 'required', 'office' => 'required', 'uniform' => 'required', 'winter_clothes' => 'required', 'shoes' => 'required', ]); $employee = new Employee; $employee->employee_id = $request->input('employee_id'); $employee->employee_name = $request->input('employee_name'); $employee->office = $request->input('office'); $image = $request->file('employee_image'); $path = Storage::disk('s3')->putFile('/image', $image, 'public'); $employee->employee_image = Storage::disk('s3')->url($path); $image->save(); $employee->save(); $goods = new Goods; $goods->uniform = $request->input('uniform'); $goods->winter_clothes = $request->input('winter_clothes'); $goods->shoes = $request->input('shoes'); $goods->other = $request->input('other'); $goods->memo = $request->input('memo'); $goods->employee_id = $employee->id; $goods->save(); return redirect(route('employee_create.index'))->with('flash_message','社員情報を登録しました'); } }
■employee_create.blade.php(ビュー)
@extends('layouts.app') @section('content') <div class="container"> <div class="login-container"> <h3>新規社員登録</h3> <div class="card-body"> <form method="POST" action="{{ route('employee_create.store') }}" enctype="multipart/form-data"> @csrf <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">社員番号</label> <div class="col-md-6"> <input type="tel" name="employee_id" class="form-control" value="{{old('employee_id')}}" placeholder="社員番号を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">名前</label> <div class="col-md-6"> <input type="text" name="employee_name" class="form-control" value="{{old('employee_name')}}" placeholder="名前を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">所属事業所</label> <div class="col-md-6"> <select name="office" class="form-control"> <option value="">事業所を選択してください</option> <option value="1事業所">1事業所</option> <option value="2事業所">2事業所</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">画像</label> <div class="col-md-6"> <input type="file" name="employee_image" class="form-control" value="{{old('employee_image')}}" placeholder="画像を挿入してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">制服</label> <div class="col-md-6"> <select name="uniform" class="form-control"> <option value="">制服のサイズを選択してください</option> <option value="S">S</option> <option value="M">M</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">防寒着</label> <div class="col-md-6"> <select name="winter_clothes" class="form-control"> <option value="">防寒着のサイズを選択してください</option> <option value="S">S</option> <option value="M">M</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">靴</label> <div class="col-md-6"> <select name="shoes" class="form-control"> <option value="">靴のサイズを選択してください</option> <option value="1㎝">1㎝</option> <option value="2㎝">2㎝</option> </select> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">その他</label> <div class="col-md-6"> <input type="text" name="other" class="form-control" value="{{old('other')}}" placeholder="その他を入力してください"> </div> </div> <div class="form-group row"> <label class="col-md-4 col-form-label text-md-right">メモ</label> <div class="col-md-6"> <input type="text" name="memo" class="form-control" value="{{old('memo')}}" placeholder="メモを入力してください"> </div> </div> <div class="form-group row mb-0"> <div class="col-md-8 offset-md-4"> <input type="submit" value="社員登録する" class="btn btn-primary"> <input type="reset" value="戻る" class="btn btn-secondary" onclick='window.history.back(-1);'> </div> </div> </form> </div> </div> </div> @endsection

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

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

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

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

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

AbeTakashi

2021/09/03 02:37

逆に情報が多すぎるというか、もう少しシンプルな実装(テストコード)で原因の切り分けをした方が良いと思います。S3の画像のアップロードが怪しいなら、サーバ内にある画像をアップロードだけするコードにしてみるとか。現状だと要素が多くて、どこに不具合が潜んでいるのか、外部の人には容易に想像ができません。画像のアップロードやDBの処理で何が起きてるのかは分からないです。
ttt---aaa

2021/09/04 13:48

Abe Takahashiさん コメントありがとうございます。原因について情報が多いことなど理解しましたので、切りかけて模索したいと思います。貴重なご意見ありがとうございます。
guest

回答1

0

自己解決

AWSの設定(IAM、バケット)を一から構築し直したところ、当エラーではない別のエラーが発生しました。別エラーについては別問題ですので自己解決といたします。

当質問のエラー原因としてはエラー文の通り、バケットの設定が環境設定(.envファイルやherokuの環境変数)と一致してなかったことが原因と思われます。

投稿2021/09/15 03:33

ttt---aaa

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問