如何将私有资源映射到 Laravel 中的 public?

How to map private resource to public in Laravel?

我一直在使用 Storage facade 来存储用户个人资料图片,它们被保存在项目的 Storage 文件夹中。问题是由于存储文件夹的权限,我无法直接显示这些照片,我读过有人提到将私有资源映射到 public,但我不确定如何做到这一点。

例如,这是我用来保存照片上传的一段代码

 if (Storage::disk('public')->has($usersname)) {
            Storage::delete($usersname. '.' . $ext);
        }
        Storage::disk('public')->put($filename, File::get($file));

但是在视图中我不能直接显示这个现在保存的资源

您可以使用两种不同的方法:

  • #1:为您的存储定义一个新磁盘,该磁盘链接到 public 文件夹内的目录。类似于 public/profile_pics。那么,您需要做的就是在上传个人资料图片时使用该磁盘。这样,他们就可以在任何地方访问;
  • #2:如果你不想直接暴露你的文件,为你的头像定义一个私有磁盘,然后创建一个路由(可能/profile-pic/{userId}) 将使用图像数据和正确的 headers;
  • 提供特定响应

编辑:Laravel 使用 Flysystem 进行存储。所以,如果 you take a look to the API page of the project 你可以找到

$mimetype = $filesystem->getMimetype('path/to/file.txt');

可以帮助您为要构建的响应获取正确 mimetype 的示例(如果您正在实施 #2)。

希望对您有所帮助:)

The public disk is meant for files that are going to be publicly accessible. By default, the public disk uses the local driver and stores these files in storage/app/public. To make them accessible from the web, you should create a symbolic link from public/storage to storage/app/public.

Laravel Docs - Filesystem - Configuration

如果这样做,您将在 public 中有一个文件夹,您可以使用该文件夹并将您的 URL 指向这些文件。 (www.yoursite.com/storage/...)