2

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

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

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

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

4

2 回答 2

3

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

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

编辑:Laravel 使用 Flysystem 进行存储。因此,如果您查看项目的 API 页面,您可以找到

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

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

希望能帮助到你 :)

于 2016-05-26T10:33:35.390 回答
1

公共磁盘适用于可公开访问的文件。默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在 storage/app/public 中。要使它们可以从 Web 访问,您应该创建一个从 public/storage 到 storage/app/public 的符号链接。

Laravel 文档 - 文件系统 - 配置

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

于 2016-05-26T11:34:13.903 回答