搜索
首页php框架Laravel完全掌握AWS S3在Laravel中的使用

本篇文章给大家带来了关于在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 账户唯一),选择您操作的区域,并保留所有默认值(包括标记为 “阻止公共访问设置” 的区域)。

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

创建存储桶后,我们需要对其执行操作的权限。 假设我们创建了一个名为 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视频教程

以上是完全掌握AWS S3在Laravel中的使用的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:learnku。如有侵权,请联系admin@php.cn删除
将JavaScript框架(React,Vue,Angular)与Laravel Backend集成将JavaScript框架(React,Vue,Angular)与Laravel Backend集成May 03, 2025 am 12:20 AM

React,Vue,AndangularCanBeintegratedWithLaravelByFollowingSpecificetUpSteps.1)forreact:installReactusingLaravelui,setupcomponentsinapp.js.js.js.js.2)forvue:uselaravel'uselaravel'sbuilt'sbuilt'sbuilt invuesupport,configureInapp.js.3)forangular forangular setuplare sereplare sereptery sereptery sereptery secparearly separly serecrourty secparroughtourtaly

任务管理工具:远程项目的优先级和跟踪进度任务管理工具:远程项目的优先级和跟踪进度May 02, 2025 am 12:25 AM

taskManagementtoolSareessential forefectiverMototeprojectManagementbyPrioritizingTaskSandTrackingProgress.1)usetoolsliketrelliketreloandasanatosetprioritieswithlabelsortags.2)

最新的Laravel版本如何提高性能?最新的Laravel版本如何提高性能?May 02, 2025 am 12:24 AM

1)itoptimizeseLizeSeloQuentModelloAdingWithlazyProxies.3)

全栈Laravel应用程序的部署策略全栈Laravel应用程序的部署策略May 02, 2025 am 12:22 AM

最佳的全栈Laravel应用部署策略包括:1.零停机部署,2.蓝绿部署,3.持续部署,4.金丝雀发布。1.零停机部署使用Envoy或Deployer自动化部署过程,确保应用在更新时保持可用。2.蓝绿部署通过维护两个环境实现无停机部署,并允许快速回滚。3.持续部署通过GitHubActions或GitLabCI/CD自动化整个部署流程。4.金丝雀发布通过Nginx配置,将新版本逐步推广给用户,确保性能优化和快速回滚。

扩展全堆栈Laravel应用程序:最佳实践和技术扩展全堆栈Laravel应用程序:最佳实践和技术May 02, 2025 am 12:22 AM

toscalealaravelApplication有效,焦点databaseSharding,缓存,负载平衡和microservices.1)实现DataBaseShardingTodistAcribedateAtaCrossmultipledataBasesForimProvesforimpRevemperformance.2)uselaravel'scachingsystemystemystemystemystemnememmemememememcachedtebachedtorcachedtobcachebab

沉默的斗争:克服分布式团队中的沟通障碍沉默的斗争:克服分布式团队中的沟通障碍May 02, 2025 am 12:20 AM

doovercomecommunicationbarriersIndistributedTeams,使用:1)VideoCallSforface-face-Faceinteraction,2)setClearresponsEtimepections,3)chooseappropropraproproprapropropriatecommunicationTools,4)CreatseateAteAteAteamCommunicationGuide和5)建立PemersonalboundariestariestopreventBreventBurniationBurnication.the

使用Laravel Blade在全栈项目中进行前端模板使用Laravel Blade在全栈项目中进行前端模板May 01, 2025 am 12:24 AM

laravelbladeenhancesfrontendtemplatinginflatinginflationll-stackprojectsbyferingCleanSyntaxandaxandpoperfelfulfeatures.1)itallowsforeasyvariableasyvariabledisplayandControlstructures.2)bladesuportsuportsuportscreatingingingingingingingingingingangingandredreingscomponents components components components,aidinginmanagingcomplexuis.3)

使用Laravel:实用教程构建全堆栈应用程序使用Laravel:实用教程构建全堆栈应用程序May 01, 2025 am 12:23 AM

laravelisidealforll-stackapplicationsduetoitselegantsyntax,complastissionecosystem和perperatefulfeatures.1)UseeloquentormForintuiveDiendbackendDatamanipulation,butavoidn 1Queryissues.2)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具