如何使用 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)来深入学习和实现更多功能。

相关推荐
ShyanZh2 小时前
【Python3基础】13-Python 常用设计模式
开发语言·python·设计模式
m0_380743872 小时前
Qt侧边栏布局的实现示例
开发语言·c++
zh_xuan2 小时前
c++ 23 std::out_ptr用法
开发语言·c++23·out_ptr
陆卿之2 小时前
Java对接DeepSeek
java·开发语言·人工智能
庄园特聘拆椅狂魔2 小时前
Java 后端转全栈的第一课:从前端项目搭建到技术选
java·开发语言·前端
weixin_307779133 小时前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
ProcessOn官方账号3 小时前
java IO操作 你快速认识IO的相关基本知识
java·开发语言
神仙别闹3 小时前
基于C++实现的(控制台)学校开课查询系统
开发语言·c++
分布式存储与RustFS3 小时前
图床搬到自己的对象存储:PicGo 加 S3 插件的完整配置
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
只睡四小时4 小时前
JS 手写 D-pad 空间导航:电视端焦点引擎实战
android·开发语言·前端·javascript·ecmascript·hls·空间导航