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

时间:2018-07-20 12:48:05

标签: php laravel eloquent laravel-blade

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

创建用户时,我正在使用-

在存储目录中创建一个文件夹
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]);

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

任何帮助,我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

这解决了我的问题...

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

我在代码中使用了此功能,并且预览对于pdf文件工作正常。

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