如何使用PHP版AWS SDK 3实现简单上传对象至S3存储桶?
PHP AWS SDK 3 实现S3简单对象上传
以下是对应你SDK 2代码的SDK 3实现,保持简单上传的逻辑,适配SDK 3的API规范:
<?php define('S3_KEY', '你的AWS访问密钥'); define('S3_SECRET', '你的AWS秘密密钥'); define('S3_BUCKET_NAME', '目标存储桶名称'); define('S3_REGION', '你的存储桶所在区域,例如us-east-1'); // 引入SDK 3的自动加载文件(通过Composer安装后) require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; try { // 创建S3客户端 $s3 = S3Client::create([ 'credentials' => [ 'key' => S3_KEY, 'secret' => S3_SECRET, ], 'region' => S3_REGION, 'version' => 'latest', // 指定API版本,通常用latest即可 ]); $origin = '本地文件路径'; // 对应你原代码中的$origin变量 $filename = 'example/001/1.jpg'; // S3中的对象键 // 打开本地文件资源 $resource = fopen($origin, 'r'); // 执行简单上传 $s3->putObject([ 'Bucket' => S3_BUCKET_NAME, 'Key' => $filename, 'Body' => $resource, 'ACL' => 'public-read', // 设置对象为公开可读 ]); // 生成并返回对象的公开URL return $s3->getObjectUrl(S3_BUCKET_NAME, $filename); } catch (AwsException $e) { // 捕获上传异常,返回false return false; }
关键差异说明
- 客户端初始化:SDK 3使用
S3Client::create()替代SDK 2的factory(),且必须指定存储桶所在的region参数 - 上传方法:通过
putObject()实现简单上传,参数以关联数组传递,结构更明确 - URL获取:
putObject()返回结果不再包含对象URL,需调用getObjectUrl()方法生成公开访问地址 - 异常处理:统一捕获
Aws\Exception\AwsException,涵盖所有S3相关异常
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

