Files
hospital-applets-api/extend/Alibaba/Oss.php
T
2023-03-22 15:15:33 +08:00

144 lines
4.1 KiB
PHP

<?php
namespace Extend\Alibaba;
use App\Exception\BusinessException;
use DateTime;
use DateTimeInterface;
use OSS\Core\OssException;
use OSS\OssClient;
/**
* 阿里云oss
*/
class Oss
{
protected array $config;// 系统配置
public function __construct()
{
$this->config = config("alibaba.oss");
}
/**
* 创建客户端
* @return OssClient
*/
public function createClient(): OssClient
{
try {
return new OssClient($this->config['accessKey'], $this->config['accessKeySecret'], $this->config['endpoint']);
} catch (OssException $e) {
throw new BusinessException($e->getMessage());
}
}
/**
* 获取签名
* @param string $dir 用户上传文件时指定的前缀。
* @return array
*/
public function signature(string $dir): array
{
try {
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问。
$end = $now + $expire;
$expiration = $this->gmt_iso8601($end);
$start = array(0 => 'starts-with', 1 => '$key', 2 => $dir);
$conditions[] = $start;
$arr = array('expiration' => $expiration, 'conditions' => $conditions);
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $this->config['accessKeySecret'], true));
$response = array();
$response['accessid'] = $this->config['accessKey'];
// $response['host'] = "https://" . $this->config['bucket'] . '.' . $this->config['endpoint'];
$response['host'] = config('alibaba.oss.custom_domain_name');
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
$response['callback'] = "";
$response['dir'] = $dir; // 这个参数是设置用户上传文件时指定的前缀。
return $response;
} catch (\Exception $e) {
throw new BusinessException($e->getMessage());
}
}
/**
* @param $time
* @return string
* @throws \Exception
*/
protected function gmt_iso8601($time): string
{
return str_replace('+00:00', '.000Z', gmdate('c', $time));
}
/**
* 上传
* @param string $filename 图片名称
* @param mixed $content 内容 字符串或文件流
* @return string
*/
public function putObject(string $filename, mixed $content): string
{
try {
$ossClient = $this->createClient();
$ossClient->putObject($this->config['bucket'], $filename, $content);
return $filename;
}catch(\Exception $e) {
throw new BusinessException($e->getMessage());
}
}
/**
* 下载自定义风格文件到内存
* @param string $filename
* @param string $style
* @return string
*/
public function getCusTomObjectToRAM(string $filename,string $style = "image/resize"): string
{
try {
// $download_file = "./runtime/aaa.jpg";
$ossClient = $this->createClient();
$options = array(
OssClient::OSS_PROCESS => $style,
// OssClient::OSS_FILE_DOWNLOAD => $download_file,
);
$object = $filename;
return $ossClient->getObject($this->config['bucket'], $object,$options);
}catch(\Exception $e) {
throw new BusinessException($e->getMessage());
}
}
/**
* 下载文件到内存
* @param string $filename
* @param string $style
* @return string
*/
public function getObjectToRAM(string $filename): string
{
try {
$ossClient = $this->createClient();
return $ossClient->getObject($this->config['bucket'], $filename);
}catch(\Exception $e) {
throw new BusinessException($e->getMessage());
}
}
}