在ThinkPHP6中使用亚马逊S3作为存储需要使用一个适合的库来与S3接口交互。这里我们可以使用league/flysystem-aws-s3-v3库来实现
composer require league/flysystem-aws-s3-v3 aws/aws-sdk-php
然后,在ThinkPHP6中配置S3存储驱动。在config目录下创建一个新的配置文件,例如filesystem.php,并配置S3相关信息:
// config/filesystem.php
return [
'default' => 's3',
'disks' => [
's3' => [
'type' => 'AwsS3',
'key' => 'your-aws-access-key-id',
'secret' => 'your-aws-secret-access-key',
'region' => 'your-aws-default-region', // 例如 ap-southeast-1
'version' => 'latest',
'bucket_endpoint' => false,
'use_path_style_endpoint' => false,
'endpoint' => 'https://s3.example.com', // 亚马逊S3的endpoint
'bucket_name' => 'your-bucket',
],
// 如果需要配置更多的磁盘,可以在这里添加
],
];
接下来,在应用中使用S3存储。例如,上传文件:
use League\Flysystem\Filesystem;
use League\Flysystem\AwsS3V3\AwsS3V3Adapter;
use Aws\S3\S3Client;
// 创建S3客户端
$s3 = new S3Client([
'version' => 'latest',
'region' => 'your-aws-default-region',
'credentials' => [
'key' => 'your-aws-access-key-id',
'secret' => 'your-aws-secret-access-key',
],
]);
// 创建适配器
$adapter = new AwsS3Adapter($s3, 'your-bucket');
// 创建文件系统对象
$filesystem = new Filesystem($adapter);
// 上传文件
$filesystem->write('example.txt', 'contents');
// 上传图片
$filePath = '/Sites/img/test.jpeg';
$s3FilePath = 'public/test.jpeg';
$filesystem->write($s3FilePath, file_get_contents($filePath));
// 获取公开链接
$url = $s3->getObjectUrl('your-bucket', $s3FilePath);
echo $url;