<?php


use Aws\S3\S3Client;
use Model\Main\Config\DbModel;

class AwsOss
{
const IMG = 1;
const MP4_VIDEO = 2;

/**
* 获取解密后 base64文件
* @cli php cli.php Test getObjectUrl
* @param string $url
* @param int $fileType 1 图片 2 mp4视频
* @return string
* @throws \Exception
*/
public static function getUrlBase64(string $url, int $fileType)
{
$config = DbModel::formatDbConfig(AwsOss::AWS_OSS_PUBLIC_TAG);

return self::getKycBase64File($url, $config, $fileType);
}

/**
* 获取二进制加密文件
* @param $url
* @param array $config aws 桶配置
* @param int $fileType 1 图片类型 2 视频类型(mp4)
* @return string
* @throws \Exception
*/
private static function getKycBase64File($url, array $config, $fileType = self::IMG)
{
$bucket = $config['bucket'];
$sdKParams = $config['sdk_params'];

$fileKey = trim(parse_url($url)['path'], '/'); // 一定不能带 /

$s3Client = new S3Client($sdKParams);
// 下载文件资源
$result = $s3Client->getObject(['Bucket' => $bucket, 'Key' => $fileKey]);

$fileSourceObj = $result['Body'] ?? "";
if ('' === $fileSourceObj) {
throw new \Exception('文件资源拉取失败');
}

if ($fileType == 1) {
$type = getimagesizefromstring($fileSourceObj)['mime']; //获取二进制流图片格式
} else {
$type = 'audio/mp4';
}

return 'data:' . $type . ';base64,' . chunk_split(base64_encode($fileSourceObj));
}

}