首先使用 composer在项目中下载aws:
composer require aws/aws-sdk-php
/**
* AWS S3上传文件
* @param string $file 文件名称
* @return array
*/
function fileUpload($file){
//设置超时
set_time_limit(0);
//证书 AWS access KEY ID 和 AWS secret access KEY 替换成自己的
$credentials = new Aws\Credentials\Credentials('AWS access KEY ID ', 'AWS secret access KEY');
//s3客户端
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
//地区 亚太区域(新加坡)
//AWS区域和终端节点: http://docs.amazonaws.cn/general/latest/gr/rande.html
'region' => 'ap-southeast-1',
//加载证书
'credentials' => $credentials,
//开启bug调试
//'debug' => true
]);
//存储桶 获取AWS存储桶的名称
$bucket = 'test';//'AWS存储桶名称';
//需要上传的文件
//ROOT_PATH项目根目录,文件的本地路径例:D:/www/abc.jpg;
$source = ROOT_PATH.$file;
//多部件上传
$uploader = new Aws\S3\MultipartUploader($s3, $source, [
//存储桶
'bucket' => $bucket,
//上传后的新地址
'key' => $file,
//设置访问权限 公开,不然访问不了
'ACL' => 'public-read',
//分段上传
'before_initiate' => function (\Aws\Command $command) {
// $command is a CreateMultipartUpload operation
$command['CacheControl'] = 'max-age=3600';
},
'before_upload' => function (\Aws\Command $command) {
// $command is an UploadPart operation
$command['RequestPayer'] = 'requester';
},
'before_complete' => function (\Aws\Command $command) {
// $command is a CompleteMultipartUpload operation
$command['RequestPayer'] = 'requester';
},
]);
try {
$result = $uploader->upload();
//上传成功--返回上传后的地址
$data = [
'type' => '1',
'data' => urldecode($result['ObjectURL'])
];
} catch (Aws\Exception\MultipartUploadException $e) {
//上传失败--返回错误信息
$uploader = new Aws\S3\MultipartUploader($s3, $source, [
'state' => $e->getState(),
]);
$data = [
'type' => '0',
'data' => $e->getMessage();
];
}
return $data;
}