如何使用 PHP 操作亚马逊 S3 对象云存储

以下是使用PHP与亚马逊S3对象云存储(也有其他支持S3协议的云存储服务,原理类似)进行交互的常见文档接口使用示例,涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。

前提条件

  1. 首先,你需要获取相应云存储服务(以亚马逊S3为例)的访问密钥(Access Key)和秘密访问密钥(Secret Access Key),这些将用于在PHP代码中进行身份验证。

  2. 确保你的服务器环境已经安装了PHP,并且支持相关的扩展(如 `aws/aws-sdk-php` 扩展,用于和S3交互)。可以通过 `composer` 安装该扩展,在项目目录下执行命令 `composer require aws/aws-sdk-php`。

连接到S3存储服务

以下是一段基本的PHP代码示例,用于初始化与S3的连接:```php

php 复制代码
<?php
require'vendor/autoload.php'; // 引入自动加载文件(通过composer安装扩展后生成)

use Aws\S3\S3Client;

// 创建S3客户端实例

$client = new S3Client([
    'version' => 'latest',
    'endpoint' => $this->config['domain'],
    'region' =>$this->config['region'], // 替换为你的S3存储区域,比如 'us-east-1'
    'credentials' => [
        'key' => $this->config['access_key'], // 替换为实际的访问密钥
        'secret' => $this->config['secret_key'], // 替换为实际的秘密访问密钥
    ],
      'http' => [ 'verify' => false, ],
    'use_path_style_endpoint' => true,
/*
路径风格(Path-Style):而 use_path_style_endpoint 配置选项用于强制客户端采用路径风格的请求格式来发送请求。当启用这个配置后,请求的 URL 会变成 
https://s3.<region>.amazonaws.com/<bucket-name>/<object-key>
,比如 
https://s3.us-east-1.amazonaws.com/my-bucket/images/picture.jpg
。这种格式把存储桶名称放在路径中,更像是传统的基于路径的资源访问方式*/    
]);

?>

```

文件上传操作

以下代码展示如何将本地文件上传到S3存储桶中:```php

php 复制代码
<?php
// 假设前面已经创建好$client实例

$bucket ='my-bucket'; // 替换为你在S3中的存储桶名称
$key = 'path/to/uploaded/file.txt'; // 文件在S3存储桶中的键(路径+文件名),可自行定义
$source = '/path/to/local/file.txt'; // 本地文件的实际路径

try {
    $result = $client->putObject([
        'Bucket' => $bucket,
        'Key' => $key,
        'SourceFile' => $source,
    ]);
    echo "文件上传成功";
} catch (Exception $e) {
    echo "文件上传失败: ". $e->getMessage();
}
?>

```

文件下载操作

下面是从S3存储桶中下载文件到本地的示例代码:

php 复制代码
```php
<?php
$bucket ='my-bucket';
$key = 'path/to/downloaded/file.txt';
$destination = '/path/to/local/save/file.txt'; // 本地保存文件的路径

try {
    $client->getObject([
        'Bucket' => $bucket,
        'Key' => $key,
        'SaveAs' => $destination,
    ]);
    echo "文件下载成功";
} catch (Exception $e) {
    echo "文件下载失败: ". $e->getMessage();
}
?>
```

文件删除操作

以下示例用于删除S3存储桶中的指定文件:

php 复制代码
```php
<?php
$bucket ='my-bucket';
$key = 'path/to/delete/file.txt';

try {
    $result = $client->deleteObject([
        'Bucket' => $bucket,
        'Key' => $key,
    ]);
    echo "文件删除成功";
} catch (Exception $e) {
    echo "文件删除失败: ". $e->getMessage();
}
?>
```

列举存储桶中的文件

这段代码可以列出指定S3存储桶中的部分或全部文件:

php 复制代码
```php
<?php
$bucket ='my-bucket';

try {
    $objects = $client->listObjects([
        'Bucket' => $bucket,
    ]);

    foreach ($objects['Contents'] as $object) {
        echo $object['Key']. "\n";
    }
} catch (Exception $e) {
    echo "获取文件列表失败: ". $e->getMessage();
}
?>

```

以上只是一些基础的操作示例,S3对象云存储通过PHP接口还可以实现更多复杂功能,比如设置文件的访问权限(ACL)、生成预签名的URL(用于临时授权访问文件等情况)等。你可以根据实际需求,进一步查阅 `aws/aws-sdk-php` 扩展的官方文档(https://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html)来深入学习和实现更多功能。

相关推荐
用户9623779544811 分钟前
CTF 伪协议
php
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1236 天前
matlab画图工具
开发语言·matlab