如何将私有资源映射到 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/...)
我一直在使用 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/...)