0

0

完全掌握AWS S3在Laravel中的使用

WBOY

WBOY

发布时间:2022-02-14 14:51:46

|

3441人浏览过

|

来源于learnku

转载

本篇文章给大家带来了关于在laravel中使用aws s3的相关知识,aws s3为我们提供了存储服务器文件的地方,在云中存储文件不需要占用太多的磁盘空间,希望对大家有帮助。

完全掌握AWS S3在Laravel中的使用

AWS S3 为我们提供了存储服务器文件的地方。 这样做有的好处是:

  • 备份 / 冗余 - S3 和类似产品具有内置备份和冗余

  • 扩展 - 在现代服务器(例如无服务器或容器化环境以及传统负载平衡环境)中,在服务器外保存文件成为了必要的

  • 磁盘使用率 - 在云中存储文件时不需要太多的磁盘空间

  • 功能 - S3(和其他云)具有一些很棒的功能,例如对文件的版本控制、删除旧文件(或以更便宜的方式存储它们)的生命周期规则、删除保护等等

现在使用 S3(即使在单服务器设置中)从长远来看可以减少麻烦。 这是你应该知道的!

配置

配置 S3 需要使用以下内容:

  • 在 Laravel 中 - 通常通过 .env,但也可能在 config/filesystem.php 中

  • 您的 AWS 账户

Laravel Config

如果您检查您的 config/filesystem.php 文件,您会发现已有 S3 选项。 它已经设置为 .env 文件中的环境变量!

除非您需要对此进行自定义,否则您可以不理会它,只需在 .env 文件中设置:

#(可选)将默认文件系统驱动设置为 S3
FILESYSTEM_DRIVER=sqs
# 添加基于 S3 的文件驱动所需的参数
AWS_ACCESS_KEY_ID=xxxzzz
AWS_SECRET_ACCESS_KEY=xxxyyy
AWS_DEFAULT_REGION=us-east-2
AWS_BUCKET=my-awesome-bucket
AWS_USE_PATH_STYLE_ENDPOINT=false

config/filesystem.php 文件包含以下选项 :

return [
    'disks' => [
        // 'local' 和 'public' 省略...
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        ],
    ],
];

一些选项我们没有在 .env 文件中使用。例如,可以设置 AWS_URL,这对于使用具有 S3 兼容 API 的其他文件存储云是有用的,例如 CloudFlare 的 R2 或 Digital Ocean 的 Spaces。

AWS 配置

在 AWS 中,您需要做两件事:

  • 在 S3 服务中创建存储桶

  • 创建一个 IAM 用户以获取 Key 和 Secret Key,然后将策略附加到该用户以允许访问 S3 API。

与 AWS 中的任何东西一样,在 S3 中创建存储桶需要查看大量配置选项,并想知道您是否需要其中的任何一个。 对于大多数用例,您不需要!

前往 S3 控制台,创建一个存储桶名称(它必须是全局唯一的,而不仅仅是您的 AWS 账户唯一),选择您操作的区域,并保留所有默认值(包括标记为 “阻止公共访问设置” 的区域)。

其中一些选项是您可能想要使用的,但您可以稍后选择它们。

Tome
Tome

先进的AI智能PPT制作工具

下载

创建存储桶后,我们需要对其执行操作的权限。 假设我们创建了一个名为 my-awesome-bucket 的存储桶。

我们可以创建一个 IAM 用户,选择 “编程访问”,但不要附加任何策略或设置任何其他内容。 确保记录秘密访问密钥,因为他们只会显示一次。

我创建了一个视频,展示了在此处创建存储桶和设置 IAM 权限的过程: www.youtube.com/watch?v=FLIp6BLtwj...

访问 Access KeySecret Access Key 应放入您的 .env 文件中。

接下来,单击 IAM 用户并添加内联策略。 使用 JSON 编辑器对其进行编辑,然后添加以下内容(来自 Flysystem 文档):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1420044805001",
            "Effect": "Allow",
            "Action": [
                "s3:ListBuckets",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ReplicateObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-awesome-bucket",
                "arn:aws:s3:::my-awesome-bucket/*"
            ]
        }
    ]
}

这使我们能够在我们的新存储桶上执行所需的 S3 API 操作。

Laravel 用法

在 Laravel 中,你可以像这样使用文件存储:

# 如果您将 S3 设置为默认值:
$contents = Storage::get('path/to/file.ext');
Storage::put('path/to/file.ext', 'some-content');
# 如果您没有将 S3 作为默认设置:
$contents = Storage::disk('s3')->get('path/to/file.ext');
Storage::disk('s3')->put('path/to/file.ext', 'some-content');

文件的路径(在 S3 中)被附加到存储桶名称中,因此名为 path/to/file.ext 的文件将存在于 s3://my-awesome-bucket/path/to/file.ext `。

从技术上讲,S3 中不存在目录。 在 S3 中,文件称为 “对象”,文件路径 + 名称是 “对象键”。 因此,在存储桶 my-awesome-bucket 中,我们刚刚创建了一个带有键 path/to/file.ext 的对象。

请务必查看 Laravel 文档的 Storage  以找到更多有用的使用 Storage 的方法,包括文件流和临时 URL。

价钱

S3 相当便宜 —— 我们大多数人每月会花费几美分到几美元。如果您在使用完文件后从 S3 中删除文件,或者设置生命周期规则以在设定的时间段后删除文件,则尤其如此。

定价(主要)由 3 个维度驱动。价格因地区和用途而异。下面是一个基于给定月份的 Chipper CI (我的 Laravel 应用程序的 CI)实际应用程序使用情况的示例,它在 S3 中存储了大量数据:

  • 存储: 每 GB 0.023 美元,~992GB ~= 22.82 美元

  • API 调用数量: 约 700 万个请求~= 12 美元

  • 带宽使用: 这是非常不精确的。数据传输费用约为 23 美元,但这不包括基于 EC2 的带宽费用。

关于 S3 的有用信息

如果您的 AWS 设置在私有网络中有服务器,并使用 NAT 网关,请务必创建一个 S3 端点(网关类型)。这是在 VPC 服务的 Endpoints 部分中完成的。这允许向 / 来自 S3 的调用绕过 NAT 网关,从而避免额外的带宽费用。使用它不需要额外费用。

如果您担心文件被覆盖或删除,请考虑在您的 S3 存储桶中启用 版本控制 

考虑在您的 S3 存储桶中启用 Intelligent Tiering ,以帮助节省您在旧文件后可能不会再次交互的文件的存储成本

请注意, 删除大存储桶(大量文件)可能会花钱!这是由于您必须进行大量 API 调用才能删除文件。

相关推荐:Laravel视频教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

340

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

293

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

773

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

141

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

85

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

80

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

501

2026.03.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.7万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号