Путь сохранения изображения - PullRequest
1 голос
/ 25 сентября 2019

Моя проблема в том, как создать подходящий путь, когда мне нужно сохранить изображение.Я пробовал учебное пособие, и предыдущее вмешательство SO отвечало на вопросы, но не могло применить предложенные решения.Я использую вмешательство в изображение в Laravel.

Мой текущий путь:

            $filenameWithExtThumb = $request->file("thumbnail")->getClientOriginalName();
            $filenameThumb = pathinfo($filenameWithExtThumb, PATHINFO_FILENAME);
            $extensionThumb = $request->file("thumbnail")->getClientOriginalExtension();
            $fileNameToStoreThumb = $filenameThumb."_".time().".".$extensionThumb;

            $image_resize = Image::make($request->file("thumbnail")->getRealPath());              
            $image_resize->resize(320, 240);

            $pathThumb = $request->file("thumbnail")->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

, который отлично работает, если я просто храню его без изменения размера.Если я использую

$pathThumb = $image_resize->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

, это не сработает.Я также попробовал:

$image_resize->save("/public/storage/".auth()->user()->name."'s Thumbnails");

, что тоже не работает.и

$pathThumb = $image_resize->save("/public/storage/".auth()->user()->name."'s Thumbnails");

Я хотел бы использовать это:

$pathThumb = $request->file("thumbnail")->storeAs("public/".auth()->user()->name."'s Thumbnails", $fileNameToStoreThumb);

с $image_resize.Возможно ли это и как?

Мой путь: "public / storage" .auth () -> user () -> name. "Миниатюры", $ fileNameToStoreThumb Пример:public/storage/ -> Johnny's Thumbnails -> nameOfTheFile.jpg

Edit1: Решено путем создания пути следующим образом: $pathThumb = $image_resize->save(public_path("storage/".auth()->user()->name."'s Thumbnails/".$fileNameToStoreThumb));

Теперь я хочу удалить предыдущий эскиз, за ​​исключением случаев, когда это не nothumbnail.jpg ".

                if ($request->hasFile('thumbnail')) {

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = $fileNameToStoreThumb;
                    }       

                    if($video->thumbnail!=="../nothumbnail.jpg"){
                        Storage::delete("public/storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail);

                        $video->thumbnail = $fileNameToStoreThumb;
                    }   

                }
                else{

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = "../nothumbnail.jpg";
                    } 

                    if($video->thumbnail!=="../nothumbnail.jpg"){
                        Storage::delete("public/storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail);

                        $video->thumbnail = "../nothumbnail.jpg";
                    } 

                }

И снова это проблема пути: (

Edit2: Решение для редактирования1: после многих часов я не нашел ошибку, так как ятак сильно изменил мой оригинальный код, чтобы я не смог найти его на всю жизнь. Поэтому я случайно разработал решение совершенно случайного характера:

                $filenameWithExtThumb = null;
                $filenameThumb = null;
                $extensionThumb = null;
                $fileNameToStoreThumb = null;
                $image_resize = null;
                $pathThumb = null;

                if($request->hasFile("thumbnail")){

                    $filenameWithExtThumb = $request->file("thumbnail")->getClientOriginalName();
                    $filenameThumb = pathinfo($filenameWithExtThumb, PATHINFO_FILENAME);
                    $extensionThumb = $request->file("thumbnail")->getClientOriginalExtension();
                    $fileNameToStoreThumb = $filenameThumb."_".time().".".$extensionThumb;

                    $image_resize = Image::make($request->file("thumbnail")->getRealPath());              
                    $image_resize->resize(320, 240);

                    $pathThumb = $image_resize->save(public_path("storage/".auth()->user()->name."'s Thumbnails/".$fileNameToStoreThumb));

                    if($video->thumbnail!=="../nothumbnail.jpg"){

                        unlink(public_path("storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail));
                        $video->thumbnail = $fileNameToStoreThumb;

                    }

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = $fileNameToStoreThumb;

                    }

                }
                else{

                    if($video->thumbnail!=="../nothumbnail.jpg"){

                        unlink(public_path("storage/".auth()->user()->name."'s Thumbnails/".$video->thumbnail));
                        $video->thumbnail = "../nothumbnail.jpg";

                    }

                    if($video->thumbnail==="../nothumbnail.jpg"){

                        $video->thumbnail = "../nothumbnail.jpg";

                    }

                }

Хотя я не использовал фасад фасада, но vanilla php unlinkдля удаления файла. Можно ли использовать встроенные возможности Laravel вместо ванили?

1 Ответ

0 голосов
/ 25 сентября 2019

Я думаю, что есть какой-то беспорядок с путем к хранилищу.Попробуйте этот код и убедитесь, что вы сделали с php artisan storage:link Документами

if ($request->hasFile('thumbnail') && $request->file('thumbnail')->isValid()) {
    $extension = $request->file("thumbnail")->getClientOriginalExtension();
    $image_resize = Image::make($request->file('thumbnail'));
    $image_resize->resize(320, 240);
    $hash = md5($image_resize->__toString());
    $filename = $hash . "." . $extension;
    $image_resize->save(storage_path("app/public/" . auth()->user()->name . "'s Thumbnails/" . $filename)); 
}

Это должно сохранить файл в storage / app / public / Thumbnails пользователя / filename.ext ссылка с / public / storage / Миниатюры пользователя / filename.ext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...