Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.07.2019 17:34:06

Скрытые файлов в public

Есть папки с изображениями, путь к ним таков "site.com/1/thumbnail.png", проблема в том что число в url это id пользователя и надо сделать так что бы только например админ имел доступ к этим фото, еще одна проблема путь к изображению нежелательно сохранять в базу, middleware и storage писал, ничего не вышло

Не в сети

#2 24.07.2019 23:29:34

Re: Скрытые файлов в public

Ну видимо надо начать с того, что физически этих файлов не должно быть в public. Если есть авторизация доступа, значит надо отдавать файл через PHP (через роуты, контроллеры и т.д. как ты странички отдаёшь, всё так же, только тип контента другой)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 25.07.2019 17:33:14

Re: Скрытые файлов в public

я просто не совсем понял как это делать, например сохраняю я картинку в storage/local что бы ее небыло видно, как мне ее отрендерить на екран?

Не в сети

#4 25.07.2019 20:27:22

Re: Скрытые файлов в public

На "голом PHP" это было бы как-то так:

header("Content-type: image/png"); // ну или другой тип какой надо
readfile("$pathToPngfile);
exit;

А на Laravel как-то так:

return response()->file($pathToFile);

Laravel должен сам позаботиться о правильных заголовках ответа.

Изменено artoodetoo (25.07.2019 20:31:52)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#5 25.07.2019 21:10:27

Re: Скрытые файлов в public

я не посмотрел ответ и сделал немного по другому через storage но все равно спасибо может позже перепишу код, а тут я сделал по своему может поможет кому то


функция рендера изображения

public function getUserPhoto($id, $filename)
    {
        $path = storage_path('app/public/uploads/'. $user. '/' . $filename);
        if(!Storage::disk('public')->exists('uploads/'.$user.'/'.$filename)) {
            abort(404);
        }
        $image = imagecreatefromstring(file_get_contents($path));
        header('Content-type: image/pjpeg');
        return imagejpeg($image);
    }

а вот роут

Route::get('/storage/{id}/{filename}', 'UsersController@getUserPhoto')->name('get.user.photo');

ну и сам рендер на вюхе

<img src="{{ route('get.user.photo', [$user->id, 'thumbnail.jpeg'])}}">

Изменено DaKoshin (25.07.2019 21:11:32)

Не в сети

Подвал раздела