如何在Laravel中将私人资源映射到公众?

时间:2016-05-26 10:18:09

标签: php laravel laravel-5.2 laravel-facade

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

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

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

但是在视图中我无法直接显示此已保存的资源

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

希望有所帮助:)

答案 1 :(得分:1)

  

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

Laravel Docs - Filesystem - Configuration

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