1. composer 安装aws工具类
composer require aws/aws-sdk-php
2.获取预上传链接
use Aws\S3\S3Client;
/**
* aws s3 获取s3预上传文件presigned url
* @param [type] $key [aws的目录]
* @return [type] [string]
*/
function getPresignedUrl($key)
{
$region = '';
$version = '';
$bucket = '';
$awskey = '';
$secret = '';
$s3Client = S3Client::factory ( array (
'region' => $region,
'version' => $version,
'credentials' => array(
'key' => $awskey,
'secret' => $secret,
),
));
$cmd = $s3Client->getCommand('PutObject', [
'Bucket' => $bucket,
'Key' => $key,
// 'ACL' => 'public-read'
]);
$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
// Get the actual presigned-url
$presignedUrl = (string)$request->getUri();
return $presignedUrl;
}
3.测试 预上传链接
echo $presigned_url = getPresignedUrl('/test/test.jpg');
//正确返回如下
//https://bucket.s3.ap-southeast-1.amazonaws.com/test/test.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAYLOOZPU22XBZQSL2%2F20210420%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20210420T075102Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=bdf605421ddb77d62399603f1583335a7a80e5fb5972899cb15658277884456f
4.使用预上传链接上传,这里用postman测试,注意一定要用put方法直接上传,不用form