2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-13

#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のファイル操作をする方法まとめ

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?