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

问题描述 投票:0回答:2

我必须为每个用户上传一些文件,并且不应该公开访问这些文件。

当用户创建时,我正在使用以下方式在存储目录中创建一个文件夹:

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 laravel eloquent laravel-blade
2个回答
1
投票

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

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

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

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

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

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


0
投票

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

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

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

<embed name="plugin" src="{{url('/')}}/{{ Storage::disk('local')->url($file->file_name)}}" type="application/pdf">
© www.soinside.com 2019 - 2024. All rights reserved.