fix: 修改京东云创建桶接口

This commit is contained in:
Gosowong 2023-06-05 15:24:10 +08:00
parent 1e1d24a086
commit 5ccf124c35
2 changed files with 80 additions and 3 deletions

View File

@ -14,6 +14,7 @@
namespace crmeb\services\upload\extend\jdoss;
use crmeb\exceptions\UploadException;
use crmeb\services\upload\BaseClient;
/**
@ -30,7 +31,7 @@ class Client extends BaseClient
* AK
* @var
*/
protected $accessKeyId = 'FHZVOVXFEMUGWOVARS8H';
protected $accessKeyId;
/**
* SK
@ -76,6 +77,27 @@ class Client extends BaseClient
$this->uploadUrl = $config['uploadUrl'] ?? '';
}
/**
* 检测桶,不存在返回true
* @param string $bucket
* @param string $region
* @return array|bool|\crmeb\services\upload\extend\cos\SimpleXMLElement
* @author 等风来
* @email 136327134@qq.com
* @date 2022/10/17
*/
public function headBucket(string $bucket, string $region = '')
{
$url = $this->getRequestUrl($bucket, $region);
$header = [
'Host' => $url
];
return $this->request('https://' . $url, 'head', [], $header);
}
/**
* 获取桶列表
* @return array|\crmeb\services\upload\extend\cos\SimpleXMLElement
@ -96,6 +118,22 @@ class Client extends BaseClient
return $res;
}
public function createBucket($name, $region, $acl)
{
$url = $this->getRequestUrl($name, $region);
$header = [
'Host' => $url,
'Date' => gmdate('D, d M Y H:i:s \G\M\T'),
'name' => $name,
'x-amz-acl' => $acl
];
$res = $this->request('https://' . $url . '/', 'PUT', [], $header);
return $res;
}
/**
* 获取请求域名
* @param string $bucket
@ -107,6 +145,13 @@ class Client extends BaseClient
*/
protected function getRequestUrl(string $bucket = '', string $region = self::DEFAULT_REGION)
{
if (!$this->accessKeyId) {
throw new UploadException('请传入SecretId');
}
if (!$this->secretKey) {
throw new UploadException('请传入SecretKey');
}
return ($bucket ? $bucket . '.' : '') . 's3.' . $region . '.jdcloud-oss.com';
}

View File

@ -5,6 +5,11 @@ namespace crmeb\services\upload\storage;
use crmeb\services\upload\BaseUpload;
use crmeb\services\upload\extend\jdoss\Client as CrmebClient;
/**
* 京东云COS文件上传
* Class Jdoss
* @package crmeb\services\upload\storage
*/
class Jdoss extends BaseUpload
{
@ -131,9 +136,36 @@ class Jdoss extends BaseUpload
}
}
public function createBucket(string $name, string $region)
public function createBucket(string $name, string $region = '', string $acl = 'public-read')
{
// TODO: Implement createBucket() method.
$regionData = $this->getRegion();
$regionData = array_column($regionData, 'value');
if (!in_array($region, $regionData)) {
return $this->setError('COS:无效的区域!');
}
$this->storageRegion = $region;
$app = $this->app();
//检测桶
try {
$app->headBucket($name);
} catch (\Throwable $e) {
//桶不存在返回404
if (strstr('404', $e->getMessage())) {
return $this->setError('COS:' . $e->getMessage());
}
}
//创建桶
try {
$res = $app->createBucket($name, $region, $acl);
} catch (\Throwable $e) {
if (strstr('[curl] 6', $e->getMessage())) {
return $this->setError('COS:无效的区域!!');
} else if (strstr('Access Denied.', $e->getMessage())) {
return $this->setError('COS:无权访问');
}
return $this->setError('COS:' . $e->getMessage());
}
return $res;
}
public function getRegion()