【问题标题】:Laravel - Display preview of file stored in Storage directoryLaravel - 显示存储在存储目录中的文件的预览
【发布时间】:2018-07-20 12:48:05
【问题描述】:

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

当一个用户被创建时,我正在使用-

在存储目录中创建一个文件夹
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
  • 仍然无法访问文件,文件当前存储在 storage/app/{user->ref_id} 文件夹中
  • 显示您访问文件的方式
  • ,src 被替换为 [{{Storage ::get($file->file_name)}}], [{{Storage::url($file->file_name)}}], [{{storage_path($file->file_name)}}], [{{资产('app/'.$file->file_name)}}] 等..
  • 试试{{asset('app/public/'.$file->file_name)}}

标签: php laravel eloquent laravel-blade


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • file_path 是什么??
  • 尝试使用 storage_path('app/' . $folder . '/' . $name);,但它没有显示预览。直接访问链接文件开始下载,没有扩展名。
  • Content-Type 包含文件的 Mimetype,当它是八位字节流时​​,它将启动下载。您可以通过调用mime_content_type($file_path) 找出实际的 MIME 类型。
【解决方案2】:

这解决了我的问题...

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

我在我的代码中使用了它,并且预览对于 pdf 文件工作正常..

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 2016-02-09
    • 2018-08-24
    • 2017-09-03
    • 2014-08-19
    • 2020-12-19
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多