1. 使用本地服务器存储公共文件
Laravel 对图像等静态资源的默认位置是 public/ 目录。从本质上讲,如果文件位于此文件夹中,则任何人都可以通过直接链接到它来访问它。
例如,如果您有一个名为 cat.jpg 的图像并将其放置在 public/images/ 中,则任何人都可以使用链接 /images/cat.jpg 查看此图像。
重要: 确保 Web 服务器的根目录指向 Laravel 项目的 public/ 文件夹。这可确保此目录中的每个文件都对公众开放。
快速提示:如果您使用的是版本控制(如 git),请记住,将文件添加到 public/ 目录可能会标记仓库中的更改。此方法最适合您不打算在代码中经常管理或修改的静态文件。
1.2. 使用 /storage/app/public 目录
我们举个例子:我们有一个名为 cat.jpg 的镜像,我们想把它放在 storage/app/public 中。
Laravel 中的 storage/app/public/ 目录非常适合存储要公开可用的文件,例如用户上传的文件:图像、视频或文档。但是,与 public/ 目录不同的是,此处的文件无法通过 URL 直接访问。
相反,Laravel 巧妙地使用了一个从 public/storage 到 storage/app/public/ 的符号链接,允许用户通过 Web 链接访问这些文件。
要进行设置,只需运行命令 php artisan storage:link。执行此操作后,storage/app/public/ 中的任何文件都可以通过前缀为 storage/ 的 URL 进行访问。因此,我们的 cat.jpg 可以在 storage/cat.jpg URL 中查看。
2. 在本地服务器上保持文件私有
有时,文件不应该出现在公众视线中。考虑敏感信息,例如财务记录、个人详细信息或发票。
假设您有一个文件 invoice.pdf,并将其存储在 storage/app/private 目录中。现在,这是一个特殊的地方,因为与其他目录不同,它受到保护,无法直接访问 Web。
想要访问这些私有文件?Laravel 的 Storage 外观让您满意。以下是向符合条件的用户提供这些文件的简单方法:
routes/web.php
use Illuminate\Support\Facades\Storage;
Route::middleware('auth')->get('/download', function () {
// Additional checks can be added here to determine user eligibility
$userCanDownload = true;
if ($userCanDownload) {
return Storage::download('invoice.pdf');
}
return response()->noContent();
});
在这里,只有经过身份验证的用户(感谢身份验证中间件)和满足任何额外条件(如我们的$userCanDownload检查)的用户才能下载发票。简单而安全。
3. 使用 Amazon S3 进行远程存储
考虑将文件卸载到 Amazon S3 而不是将它们保存在您自己的服务器上?好主意!但首先,我们必须做好准备。
第一步:要将 Amazon S3 与 Laravel 一起使用,您需要 Flysystem S3 软件包。使用 Composer 轻松安装:
composer require league/flysystem-aws-s3-v3 "^3.0"
3.1. 为 Laravel 设置 IAM 用户
想要将您的 Laravel 应用程序与 Amazon S3 连接?让我们在 AWS 上设置一个 IAM (Identity and Access Management) 用户来获取凭证。 前往 IAM: 首先访问 AWS 上的 Security Credentials 页面。单击右上角的帐户名称以找到菜单。
添加新用户: 找到并单击 “Add Users” 按钮。
为用户命名: 为新用户键入合适的名称,然后转到下一步。
权限: 此时,您无需担心权限。我们将在配置存储桶时处理该问题。只需保留默认值并继续。
完成用户创建: 点击 “Create user”(创建用户)。
访问用户详细信息: 返回用户列表,找到您刚刚创建的用户,然后单击其名称。
复制 ARN: 在用户概述中,查找 ARN (Amazon Resource Number)。它类似于以下模式:arn:aws:iam::*****:user/****。记下它;我们将需要它来获得存储桶权限。
生成访问密钥: 向下滚动以找到“安全凭证”选项卡并单击它。然后,在“访问密钥”部分,点击“创建访问密钥”。
应用程序配置: 选择“Application running outside AWS”(在 AWS 外部运行的应用程序)选项,然后继续操作。
标记和密钥创建: 随意添加描述标签。之后,单击“Create access key”。
录制凭据: 确保同时保存 Access key (访问密钥) 和 Secret access key (秘密访问密钥)。如果这样方便,还可以选择将它们下载为 .csv 文件
友情提示: Secret access key (秘密访问密钥) 在此处仅显示一次。如果错过了它,则需要生成新密钥。始终安全地存储凭证。
3.2. 为 Laravel 设置 S3 存储桶
准备好为您的 Laravel 应用程序利用 Amazon 的 S3 存储了吗?让我们指导您创建和设置 S3 存储桶!
启动 S3: 首先,跳转到 S3 管理控制台。首先,点击 “Create bucket”(创建存储桶)。
命名您的存储桶: 为您的存储桶键入唯一名称。
专业提示: 存储桶名称需要:
在整个地区独一无二。不含空格或大写字符。
3. 选择区域: 选择最适合您需求的区域。记得记下它的代码(比如 'eu-central-1'),因为你会将其插入你的 Laravel 设置中。
4. 完成创建: 将其他设置保持为默认值。只需向下滚动并单击 “Create bucket”(创建存储桶)。
5. 访问您的新存储桶: 创建后,您会发现自己在存储桶列表中。单击新创建的存储桶的名称以深入了解其配置。
6. 调整权限: 按 Tab 键移动到“权限”,然后滚动到“存储桶策略”子部分。
7. 编辑策略: 单击此处的“编辑”按钮。
8. 粘贴 Config: 放入此配置: