Laravel - 显示存储在存储目录中的文件的预览

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]);

该文件已成功存储。现在,当用户登录时,我想在视图中显示该文件的预览。

任何帮助,我该怎么办?

答案

这是您从控制器提供文件的方式。而不是返回视图,您将返回这样的文件。如果是图像,除非您对其进行base64编码(这会增加文件大小),否则无法将其直接回显到视图。

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

在控制器中创建一个包含上面代码的函数和一些逻辑来检索正确的文件路径并为其创建路径。完成后,您可以(例如)添加视图

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

你必须自己填写所有变量。

使用此方法,文件将始终保持私有状态,并且只有在您允许用户访问后才会回显。请注意,这将使用更多资源,因为您让php处理文件而不是apache。希望这可以帮助!

另一答案

这解决了我的问题......

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

我在我的代码中使用了这个,预览适用于pdf文件..

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

以上是关于Laravel - 显示存储在存储目录中的文件的预览的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Spark 不显示存储在 /storage/app/public/profiles/ 目录中的图像

显示在laravel存储/应用程序/受保护/图像中存储的图像,但返回404

Laravel 存储符号链接图像视图

如何以及在哪里可以用laravel存储图像?

使用 laravel 在 Vue 中显示存储文件夹中的图像

如何在 laravel 上上传文件并将其存储在目录中