如何在Laravel中存储和提供没有公共访问的图像?

mnemlml8  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(136)

我用Laravel后端和React前端制作了一个应用程序,并使用基于令牌的身份验证。用户和管理员可以上传文件(例如。图像),它们存储在存储文件夹中。我基于Laravel文档创建了这个解决方案:https://laravel.com/docs/10.x/filesystem.我创建了sym链接与'php artisan storage:link'.
我的问题是,上传的文件是公开访问通过链接。我想保护这些文件,使它们只对用户可用。
我怎么能保证呢?
我试着把图像放在不同的文件夹中(例如:uploads).我试图使用“file($path)”访问文件,但它只适用于“storage/images/1697829128.jpg”,而不是“uploads/images/1697829128.jpg”。

7tofc5zh

7tofc5zh1#

当您在没有'public'的存储下创建一个文件夹时,该文件夹在浏览器URL中将不是公共的。因此,在公共目录外创建一个示例文件夹来存储您的私人文件。现在,配置Laravel应用程序,将这个新文件夹用作私人文件的磁盘。你可以在这里做这个./filesystems.php(可以根据你的喜好改变)

'private' => [
    'driver' => 'local',
    'root' => storage_path('app/private'),
],

要提供对这些映像的访问,请创建一个路由和控制器方法,用于获取映像并将其提供给经过身份验证的用户。在你的控制器中,你可以使用response()->download()方法:

public function downloadFiles($filename)
{
    $path = storage_path("app/private/files/$filename");
return response()->download($path, $filename, ['Content-Type' => 'image/jpeg']);
}

相关问题