Laravel - предварительный просмотр файла, хранящегося в каталоге хранилища

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

Когда пользователь создается, я создаю папку в каталоге хранилища, используя:

Storage::makeDirectory($user->ref_id);

Теперь у меня есть таблица файлов, в которой хранятся сведения о файлах. Вот код для загрузки файла и сохранения пути к базе данных.

$this->validate($request, [
    'file' => 'required|mimetypes:image/png,image/jpeg,application/pdf',
]);
$user = Auth::user();
$filename = time() . '.' . $request->file->getClientOriginalExtension();
$path = $request->file('file')->storeAs($user->ref_id, $filename);

$user->files()->create(['file_name' => $path]);

Файл успешно сохраняется. Теперь, когда пользователь входит в систему, я хочу отобразить предварительный просмотр этого файла в представлении.

Любая помощь, как я могу это сделать?

запустить php artisan storage:link

Adnan Mumtaz 20.07.2018 15:10

По-прежнему не удается получить доступ к файлам, файл в настоящее время хранится в папке storage / app / {user-> ref_id}.

Sunny Kumar 20.07.2018 15:10

Покажите, как вы получаете доступ к файлам

Adnan Mumtaz 20.07.2018 15:11

<embed name = "plugin" src = "{{asset ($ file-> file_name)}}" type = "application / pdf">, src заменяется на [{{Storage :: get ($ file-> file_name)}}], [{{Storage :: url ($ file-> file_name)}}], [{{storage_path ($ file-> file_name)}}], [{{asset ('app /'.$ файл-> имя_файла)}}] и т. д.

Sunny Kumar 20.07.2018 15:14

попробуйте {{asset('app/public/'.$file->file_name)}}

Adnan Mumtaz 20.07.2018 15:15

Уже пробовал и не работает, результат - localhost / rupyz / public / app / public / STPF1807001 / 1532075487.pdf

Sunny Kumar 20.07.2018 15:19

удалите первую общедоступную, затем попробуйте еще раз

Adnan Mumtaz 20.07.2018 15:21

Все еще не работает. Это доступно для просмотра ??

Sunny Kumar 20.07.2018 15:23

да, вы можете получить прямой доступ к нему в поле зрения

Adnan Mumtaz 20.07.2018 15:24

Но он все еще недоступен для меня, я жестко запрограммировал это - «локальный / rupyz / хранилище / приложение / STPF1807001 / 1532075487.pdf», и к файлам осуществляется доступ.

Sunny Kumar 20.07.2018 15:27

нужно использовать file_get_content($file_path), используйте результат в src

Hussein 20.07.2018 16:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
5 552
2

Ответы 2

Вот как вы обслуживаете файл с контроллера. Вместо того, чтобы возвращать представление, вы возвращаете файл следующим образом. В случае изображения вы не можете отобразить его напрямую в представлении, если вы не закодируете его base64 (что увеличивает размер файла).

return response()
        ->download($file_path, "file_name",
            [
                'Content-Type' => 'application/octet-stream'
            ]);

Создайте в своем контроллере функцию, содержащую приведенный выше код и некоторую логику для получения правильного пути к файлу и создания маршрута для него. После того, как вы это сделаете, вы можете (например) добавить в свое представление

<img src = "{{route('ROUTE_NAME')}}">

Разумеется, вам придется заполнить все переменные самостоятельно.

При использовании этого метода файлы всегда будут оставаться конфиденциальными и будут отображаться только после того, как вы предоставите пользователю доступ. Обратите внимание, что это БУДЕТ использовать больше ресурсов, поскольку вы позволяете PHP обрабатывать файл вместо apache. Надеюсь это поможет!

Какой будет путь к файлу ??

Sunny Kumar 20.07.2018 20:47

пытается с storage_path ('app /'. $ folder. '/'. $ name);, но не показывает предварительный просмотр. При прямом доступе к ссылке начинается загрузка файла без расширения.

Sunny Kumar 20.07.2018 20:53
Content-Type содержит Mimetype файла, когда это октет-поток, он инициирует загрузку. Вы можете узнать настоящий тип пантомимы, позвонив в mime_content_type($file_path).
Niels 22.07.2018 19:05

Это решило мою проблему ...

https://stackoverflow.com/a/41322072/6792282

Я использовал это в своем коде, и предварительный просмотр отлично работает с файлами PDF.

<embed name = "plugin" src = "{{url('/')}}/{{ Storage::disk('local')->url($file->file_name)}}" type = "application/pdf">

Другие вопросы по теме