Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@ohmoto_2020

laravel6でS3に画像アップロード&削除

S3に画像をアップロードする方法

LaravelでAWS S3へ画像をアップロードする
こちらの記事を参考にして無事S3に画像を保存できました

S3の画像の削除

※先程の記事の一部を引用し、削除コードを書いていきます
参考記事のコード = PostsController.php
実装コード = exampleController.php

削除ボタンを押すと、このコントローラが走るようにルーティング

exampleController.php
public function delete(Request $request) {
        $image = $request->image_path;
        $s3_delete = Storage::disk('s3')->delete($image);
        $db_delete = Post::where('image',$image)->delete();
        return redirect('hogehoge');
    }

これでDBとS3から画像を削除!
とおもいきや、Dbからは削除されるのにS3からは削除できていない

S3から削除できない原因

PostsController.php
$post->image_path = Storage::disk('s3')->url($path);

参考記事ではこのように、パスにURL関数を使いそれをDBに保存しているので、DBにはURLを含んだパスが保存されています。

S3はvi3kAwK0z0X19XU3LWcz63101t0rYilRHiWG9MmC.jpg

DBはhttps://example.s3-ap-northeast-1.amazonaws.com/myprefix/vi3kAwK0z0X19XU3LWcz63101t0rYilRHiWG9MmC.jpg
のように保存されているため、
exampleController.php$imageはこうなっています。

exampleController.php

$image = https://example.s3-ap-northeast-1.amazonaws.com/myprefix/vi3kAwK0z0X19XU3LWcz63101t0rYilRHiWG9MmC.jpg;

なのでS3に「そんなものないよ!」と言われているので削除ができないということでした。

解決策

参考記事をこのように変更します。

PostsController.php
public function create(Request $request)
  {
      $post = new Post;
      $form = $request->all();

      //s3アップロード開始
      $image = $request->file('image');
      // バケットの`myprefix`フォルダへアップロード
      $path = Storage::disk('s3')->putFile('myprefix', $image, 'public');
      // アップロードした画像のフルパスを取得
+     $post->image_path = $path; //追加
-     $post->image_path = Storage::disk('s3')->url($path); //削除

      $post->save();

      return redirect('posts/create');
  }

こうすることで、S3とDBに保存される名前を一致できたのでexampleController.phpを内容は変更せず削除ができるようになりました。

View

srcにhttps://example.s3-ap-northeast-1.amazonaws.com/を追加すると表示することができました!

<img src="https://example.s3-ap-northeast-1.amazonaws.com/{{ $my_image['image'] }}" >

参考

LaravelでAWS S3へ画像をアップロードする
LaravelでS3のファイル操作をする方法まとめ

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?