使用composer加载aws库

composer require aws/aws-sdk-php
require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'endpoint' => '', // 例:http://eos-beijing-1.cmecloud.cn
    'region' => 'beijing1', // 例:beijing-1 -> 就是beijing1
    'credentials' => [
        'key' => '',
        'secret' => '',
    ],
    'version' => 'latest',
    'http' => ['verify' => false], 
    'use_path_style_endpoint' => true,  // 必须启用路径式访问
]);

//第一种方式
// 列举文件
$result = $s3Client->listObjects([
    'Bucket' => '桶名',
    'Marker' => 'uploadfile/app/20250411/768987714887372800.jpg', // 开始的key,如果没有这个表示从头开始查询
	'MaxKeys' => 1 // 查询条数
]);

// 修改某个文件夹下的文件
foreach ($result->toArray()['Contents'] as $content) {
    $key = $content['Key'];
    if (strpos($key, 'uploadfile/app/20250411') !== false) {
    	// 将 your-bucket-name 桶下对象 file-name 的权限设置为公共可读。
        $result = $s3Client->putObjectAcl([
	        'Bucket' => '桶名',
	        'Key' => $key, // 例:hello.txt
	        'ACL' => 'public-read',
	    ]);
    }
}

// 第二种方式使用listObjectsV2(listObjects‌ 是旧版接口,‌listObjectsV2‌ 是 AWS 推荐的替代方案)
$objects = [];
$continuationToken = null;

do {
    $response = $s3Client->listObjectsV2([
        'Bucket' => 'jianguan-xinhualing',
        'Prefix' => 'uploadfile/20250411',  // 过滤
        'ContinuationToken' => $continuationToken,
    ]);

    // 合并当前页对象到总列表
    $objects = array_merge($objects, $response['Contents']);

    // 更新分页令牌
    $continuationToken = $response['NextContinuationToken'] ?? null;

} while ($response['IsTruncated']);
foreach ($objects as $content) {
    $key = $content['Key'];
    if (strpos($key, 'uploadfile/app/20250411') !== false) {
    	// 将 your-bucket-name 桶下对象 file-name 的权限设置为公共可读。
        $result = $s3Client->putObjectAcl([
	        'Bucket' => '桶名',
	        'Key' => $key, // 例:hello.txt
	        'ACL' => 'public-read',
	    ]);
    }
}

listObjectsV2
筛选参数:
‌Prefix‌
‌作用‌:限定返回对象的键名前缀,用于过滤特定目录或文件前缀。
‌示例‌:Prefix=‘uploadfile/20250411/’ 仅返回该目录下对象 ‌。
‌Delimiter‌
‌作用‌:定义键名的分隔符(如 /),用于模拟目录层级结构,返回结果会包含 CommonPrefixes 字段列出子目录。
‌示例‌:Delimiter=‘/’ 可将 photos/2025/ 视为目录,返回其直接子对象和子目录 。
‌StartAfter‌
‌作用‌:指定从某个键名之后开始返回结果(按键名字典序升序排列)。
‌示例‌:StartAfter=‘10001’ 跳过键名小于等于 10001 的对象,从下一个键开始返回 。
分页参数
MaxKeys‌
‌作用‌:单次请求返回的最大对象数(默认 1000,最大 1000)。
‌示例‌:MaxKeys=500 单次返回 500 条数据 ‌。
‌ContinuationToken‌
‌作用‌:分页令牌,当 IsTruncated=true 时,需用此令牌继续获取下一页数据。
‌示例‌:首次调用不传此参数,后续调用使用 NextContinuationToken 的值 。
其他参数:
‌FetchOwner‌
‌作用‌:是否返回对象所有者信息(默认 false,设为 true 会增加响应时间)。
‌示例‌:FetchOwner=true 包含 Owner 字段 。
‌EncodingType‌
‌作用‌:指定键名的编码方式(如 url),用于处理特殊字符。
‌示例‌:EncodingType=‘url’ 对键名进行 URL 编码 。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐