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

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

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

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Laravel

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

Amazon S3

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

Q&A

解決済

1回答

1306閲覧

laravel s3への画像保存方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Laravel

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

Amazon S3

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

0グッド

0クリップ

投稿2021/05/20 12:42

PHP,Laravelを用いてwebアプリを作成しており、AWSのS3に画像をアップロードしたいです。
送信画面を押すと、エラーは出ないのですが、awsのs3のバケットのオブジェクトに画像が保存されていません。
composer require league/flysystem-aws-s3-v3 "~1.0"
composer updateは実行済みで
.envファイルのAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY
WS_DEFAULT_REGION=ap-northeast-1、AWS_BUCKETどれも設定済みです。
プラウザのconsoleには画像のようにstatus:200と表示されます。
どうか、アドバイスをいただきたいです。よろしくお願いします。
イメージ説明

<template> <div> <input type="file" accept="image/jpeg, image/png" @change="onChangeImage" /> <button @click="postImage">送信</button> </div> </template> <script> import axios from 'axios'; export default { data() { return { image: {} }; }, methods: { onChangeImage: function(e) { this.image = e.target.files[0]; }, postImage: function() { const config = { header: { "Content-Type": "multipart/form-data" } }; var formData = new FormData(); formData.append("image", this.image); axios.post("/post/s3/image", formData, config).then(res => { console.log(res); }); } } }; </script>

PostImageController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Storage; class PostImageController extends Controller { public function s3(Request $request) { $disk = Storage::disk('s3'); $image = $request->image; $path = $disk->putFile('images', $image,'public'); return response()->json(['response'=>$path],200); } }

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

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

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

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

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

AbeTakashi

2021/05/20 13:31

ウェブブラウザの上のログではなく、まずはサーバサイド(WEBサーバ、Laravel)のログを見ましょう。そこにエラーの原因がでている可能性があります。そのログの内容を見ても解決方法が分からないのであれば、可能な範囲でそのログを質問文に追記してください。
退会済みユーザー

退会済みユーザー

2021/05/21 17:06

返信ありがとうござます????‍♂️ ログの確認を行ったのですが、特にエラーは出ていませんでした。’
AbeTakashi

2021/05/21 17:36

うーん、だとするとちょっと分からんですね。。そもそもそのサーバからaws cliでS3へファイルを転送できるますか? この手の不具合ってだいたいはIAMのロールの設定が足りてないとかなんですけどね。 もしくはちゃんとコピーできてるのに違うところをみてるとか? もしくは実はs3()メソッドに処理がいってないとか? $imageが空っぽとか? なんか単純なミスのような気もします。 力になれずすいません。でも、他の人からも回答がこないのでこれだとちょっと情報が足りない気もします。
opop1234

2021/05/22 13:28

.env内で`FILESYSTEM_DRIVER=s3`は指定していますでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/23 10:11 編集

返信ありがとうございます????‍♂️ config/filesystems.phpではなく、.envファイルに直接記述すればよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/23 10:28 編集

api.phpの設定がされておらず、Controllerが動いていませんでした。 設定後、ログを確認すると、 [2021-05-23 09:31:28] local.ERROR: Error executing "PutObject" on "https://naratabi.s3.ap-northeast-1.amazonaws.com/images/dumUMdW0b6yJSPFzZoV7EUeE20aoPwMwhoyeM6dc.jpeg"; AWS HTTP error: Client error: `PUT https://naratabi.s3.ap-northeast-1.amazonaws.com/images/dumUMdW0b6yJSPFzZoV7EUeE20aoPwMwhoyeM6dc.jpeg` resulted in a `403 Forbidden` response: <?xml version="1.0" encoding="UTF-8"?>というエラーが出たので、 S3のバケット管理画面にアクセスし、パブリックアクセス設定機能の項目を オフにすると、エラーが解消されたのですが、画像送信ボタンの押した後、確認すると、バケットのオブジェクトに画像が挿入されました。 質問に返信していただいた方、貴重な時間を割いていただきありがとうございました????‍♂️
AbeTakashi

2021/05/23 11:08

良かったですね。↑こちらを回答に入れて自己解決としていただき、同じような悩みがいた人の参考になるといいと思います。
退会済みユーザー

退会済みユーザー

2021/05/23 12:29

かしこまりました。そうさせていただきます????‍♂️
guest

回答1

0

ベストアンサー

api.phpの設定がされておらず、Controllerが動いていませんでした。
設定後、ログを確認すると、
[2021-05-23 09:31:28] local.ERROR: Error executing "PutObject" on "https://naratabi.s3.ap-northeast-1.amazonaws.com/images/dumUMdW0b6yJSPFzZoV7EUeE20aoPwMwhoyeM6dc.jpeg"; AWS HTTP error: Client error: PUT https://naratabi.s3.ap-northeast-1.amazonaws.com/images/dumUMdW0b6yJSPFzZoV7EUeE20aoPwMwhoyeM6dc.jpeg resulted in a 403 Forbidden response:

<?xml version="1.0" encoding="UTF-8"?>というエラーが出たので、

S3のバケット管理画面にアクセスし、パブリックアクセス設定機能の項目を
オフにすると、エラーが解消されたのですが、画像送信ボタンの押した後、確認すると、バケットのオブジェクトに画像が挿入されました。

投稿2021/05/23 12:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問