Как удалить файл в Laravel AWS s3
В контроллере написано так:
// Тут делаем валидацию
$request->validate([
"image" => "required|image",
"gif_image" => "required|image",
// тут много валидации ...
]);
// Тут добавляем картинки в aws
$path = $request->file("image")->store("images", "s3");
$gif = $request->file("gif_image")->store("gif_images", "s3");
// Публичный доступ для картинок
Storage::disk("s3")->setVisibility($path, 'public');
Storage::disk("s3")->setVisibility($gif, 'public');
// Создаем наш элемент
ModelName::create([
"image" => basename($path),
"image_url" => Storage::disk("s3")->url($path),
"gif_image" => basename($gif),
"gif_image_url" => Storage::disk("s3")->url($gif),
// тут тоже много чего ...
]);
Вроде бы ничего сложного валидировали, добавили фото в aws, открыли публичный доступ и создали элемент в БД. Но проблема в том что как удалить эти картинки из aws если мы удалим свой элемент из БД.
Пример:
public function destroy($id)
{
ModelName::find($id)->delete();
// И как тут удалить фото которое принадлежит этому элементу в aws?
session()->flash('success', "Герой удален");
return redirect()->route("anyroute");
}
Ответы (1 шт):
Автор решения: Demon __
→ Ссылка
Нашел способ может кому еще поможет.
public function destroy($id)
{
$hero = ModelName::find($id); // Находим элемент по id
Storage::disk('s3')->delete('images/' . $hero->image); // Удаляем элемент из aws вот тут
Storage::disk('s3')->delete('gif_images/' . $hero->gif_image); // И тут
$hero->delete(); //Удаляем элемент из базы
session()->flash('success', "Герой удален");
return redirect()->route("anyroute");
}