Изображение изобретения Laravel - Как УДАЛИТЬ изображение из хранилища - PullRequest
0 голосов
/ 26 ноября 2018

Я создал приложение Laravel, где я хотел загружать изображения + изменять их размеры и обрезать их, для этого я использовал Изображение изобретения

Вот мой код для хранения изображений:

        /*just image cropping + resizing*/
        $light_image = Image::make($request->file('startup_screenshot'));

        $light_image->resize(300, null, function ($constraint) {
            $constraint->aspectRatio();
        });
        $light_image->crop(300, 275, 0, 0);
        $light_image->encode('jpg');
        /*just image cropping + resizing*/

        /*image storing*/
        $hashed_light_image = md5($light_image->__toString());
        $light_image_name =  $hashed_light_image . time() . '.jpg';
        Storage::put('public/images/startups-screenshots/light_previews/' . $light_image_name, $light_image->__toString());
        $path_to_light_image = '/storage/images/startups-screenshots/light_previews/' . $light_image_name;
       /*image storing*/

Я пытался использовать этот код для удаления изображений, но он не работает:

...
$startup_to_update = Startup::find($request->id);

Storage::delete($startup_to_update->screenshot);
Storage::delete($startup_to_update->screenshot_light); // pay attention
...

Как я могу удалить эти изображения?

Большое спасибо всем за любые идеи!Я очень ценю это))

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вам не нужно использовать вмешательство для удаления изображений из хранилища.Вмешательство действует только как помощник по изображению, а не как файловая система.

use Illuminate\Support\Facades\Storage;

Storage::delete(file_path_of_image);
0 голосов
/ 27 ноября 2018

Я исправил это, путь был неправильный, я использовал этот тип пути для хранения своих изображений: "/ storage / images / startups-screenshots / light_previews / image_name.jpg" , вы можете увидеть пример кода ниже:

Storage::put('public/images/startups-screenshots/light_previews/' . $light_image_name, $light_image->__toString());

Как вы можете видеть, я использовал "public / images /...." в начале, но когда я попыталсяудалить это я не смог, потому что я должен указать путь этого типа "public / images /....", а не тот, который я использовал: " / storage / images / .... "

, поэтому я просто изменил путь с" public / images / .... "на" public / images /...."

и теперь это работает

Спасибо всем за хорошие идеи!

0 голосов
/ 27 ноября 2018

Из того, что вы пишете, мы можем получить только заклинания, но вы уверены, что сохраняете правильный путь? Помните, что Storage будет storage / app (вы можете проверить это в config-> filesystem), так что это будетхранится в

storage/app/public/images/startups-screenshots/light_previews/ . $light_image_name

Но я вижу / думаю, что вы ищете внутри

/storage/images/startups-screenshots/light_previews/' . $light_image_name

в любом случае, если вы думаете, что то, что находится внутри $ startup_to_update, является реальным путем, тогдавы можете проверить, существует ли он с помощью

Storage::has($direction)

, если он вернет true, тогда файл существует, и у вас могут быть проблемы с разрешениями.

ProTip, в этих случаях я использую длясобственный диск внутри config-> filesystems.php

'light_previews' => [
    'driver' => 'local',
    'root' => storage_path('/app/public/images/startups-screenshots/light_previews/'),
    'url' => env('APP_URL').'storage/app/public/images/startups-screenshots/light_previews/',
    'visibility' => 'public',
],

А потом я использую его вот так

Storage::disk('light_previews')->put($fileName, file_get_contents($file));//store
Storage::disk('light_previews')->delete($fileName);//delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...