本篇是新手使用PHP调aws的s3服务的一些心得
一、关于AWS-S3
s3是一个文件存储服务,当需要做成服务来进行微服务调用,或者终端服务端文件交流使用s3是一个非常不错的选择、
aws各种常见的语言例如:Java,Python,PHP,golang等都是有SDK的,可以通过SDK几行代码就操作s3
二、PHP调s3的SDK
PHP调用s3有多种方式,如果项目没用composer这种东西,而是用PHP原生或者简单的框架,那么使用源码方式最好不过了。
下面是PHP调用s3的文档,包括使用源代码还有使用包管理来安装使用AWS-SDK
https://ecloud.10086.cn/op-help-center/develop/S3%20PHP%20SDK.pdf
去下载aws.zip 源码包 :https://github.com/aws/aws-sdk-php/releases?after=3.11.1 放到项目里面
使用s3,下面是从s3取文件的代码demo
//获取s3的配置,包括access_key,secret_key,bucket,endpoint
$s3Info = $this->getFromConf();
//引入sdk的加载文件
require_once(dirname(__DIR__) . '/aws/aws-autoloader.php');
$file = null;
try{
$client = new S3Client([
'region' => '',
'version' => 'latest',
'endpoint' => 'http://10.95.110.110:8080',
'credentials' => [
'key' => $s3Info['access_key'],
'secret' => $s3Info['secret_key']
],
'use_path_style_endpoint' => true
]);
$file = $client->getObject(['Bucket' => $s3Info['bucket'], 'Key' => $filename]);
}catch(\Exception $e){
Yii::log("get img from s3 exception >>>> $e " ,CLogger::LEVEL_ERROR, __CLASS__);
return '';
}
$body = $file['Body']->getContents(); //拿到的是文件的内容
最后返回的$file['body']是文件的内容,比如txt文件就是文件内写的东西、
如果存储的是图片直接 'data:image/jpg;base64,'.base64_encode($body); 用base64转一下返回回去。