我必须为每个用户上传一些文件,并且这些文件不应公开访问。
创建用户时,我正在使用-
在存储目录中创建一个文件夹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]);
文件已成功存储。现在,当用户登录时,我想在视图中显示该文件的预览。
任何帮助,我该怎么办?
答案 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">