diff --git a/app/admin/controller/api/Upload.php b/app/admin/controller/api/Upload.php index d990a9bdf..10a725a86 100644 --- a/app/admin/controller/api/Upload.php +++ b/app/admin/controller/api/Upload.php @@ -83,7 +83,6 @@ class Upload extends Controller $data['q-ak'] = $token['q-ak']; $data['policy'] = $token['policy']; $data['q-key-time'] = $token['q-key-time']; - $data['q-signature'] = $token['d-signature']; $data['q-sign-algorithm'] = $token['q-sign-algorithm']; $data['server'] = TxcosStorage::instance()->upload(); } diff --git a/app/admin/view/api/upload.js b/app/admin/view/api/upload.js index 8a3514e78..eadced3dc 100644 --- a/app/admin/view/api/upload.js +++ b/app/admin/view/api/upload.js @@ -43,7 +43,6 @@ define(['md5'], function (SparkMD5, allowMime) { option.uploader.config.data.policy = ret.data.policy; option.uploader.config.data['q-ak'] = ret.data['q-ak']; option.uploader.config.data['q-key-time'] = ret.data['q-key-time']; - option.uploader.config.data['q-signature'] = ret.data['q-signature']; option.uploader.config.data['q-sign-algorithm'] = ret.data['q-sign-algorithm']; option.uploader.config.data.success_action_status = 200; option.uploader.config.data['Content-Disposition'] = 'inline;filename=' + encodeURIComponent(file.name); diff --git a/app/admin/view/config/storage-alioss.html b/app/admin/view/config/storage-alioss.html index c31c68a53..d5e5917e7 100644 --- a/app/admin/view/config/storage-alioss.html +++ b/app/admin/view/config/storage-alioss.html @@ -3,7 +3,7 @@ <div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px"> <p class="margin-bottom-5 font-w7">文件将上传到阿里云 OSS 存储,需要配置 OSS 公开访问及跨域策略</p> - <p>直传需要配置跨域规则,设置来源为 *,允许 Methods 为 POST,允许 Headers 为 *</p> + <p>需要配置跨域访问 CORS 规则,设置:来源 Origin 为 *,允许 Methods 为 POST,允许 Headers 为 *</p> </div> {include file='config/storage-0'} diff --git a/app/admin/view/config/storage-txcos.html b/app/admin/view/config/storage-txcos.html index 0300421f6..dbed9313d 100644 --- a/app/admin/view/config/storage-txcos.html +++ b/app/admin/view/config/storage-txcos.html @@ -1,9 +1,9 @@ <form onsubmit="return false" data-auto="true" action="{:request()->url()}" method="post" class='layui-form layui-card' autocomplete="off"> <div class="layui-card-body padding-top-20"> - <div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray layui-hide" style="border-left-width:1px"> - <p class="margin-bottom-5 font-w7">文件将上传到腾讯云 COS 存储,需要配置 COS 公开访问及跨域策略</p> - <p>直传需要配置跨域规则,设置来源为 *,允许 Methods 为 POST,允许 Headers 为 *</p> + <div class="color-text margin-left-40 margin-bottom-20 layui-code text-center layui-bg-gray" style="border-left-width:1px"> + <p class="margin-bottom-5 font-w7">文件将上传到腾讯云 COS 存储,需要配置 COS 公有读私有写访问权限及跨域策略</p> + <p>需要配置跨域访问 CORS 规则,设置:来源 Origin 为 *,允许 Methods 为 POST,允许 Headers 为 *</p> </div> {include file='config/storage-0'} @@ -50,7 +50,7 @@ </label> <div class="layui-input-block"> <input id="storage.txcos_bucket" type="text" name="storage.txcos_bucket" required value="{:sysconf('storage.txcos_bucket')}" placeholder="请输入腾讯云COS存储 Bucket" class="layui-input"> - <p class="help-block">填写腾讯云COS存储空间名称,如:think-admin-cos</p> + <p class="help-block">填写腾讯云COS存储空间名称,如:thinkadmin-1251143395</p> </div> </div> @@ -64,16 +64,6 @@ </div> </div> - <div class="layui-form-item"> - <label class="layui-form-label" for="storage.txcos_appid"> - <span class="color-green font-w7">账号编号</span><br><span class="nowrap color-desc">APPID</span> - </label> - <div class="layui-input-block"> - <input id="storage.txcos_appid" type="text" name="storage.txcos_appid" required value="{:sysconf('storage.txcos_appid')}" placeholder="请输入腾讯云主账号 APPID" class="layui-input"> - <p class="help-block">可以在 [ 腾讯云 > 个人中心 ] 获取到主账号的 APPID</p> - </div> - </div> - <div class="layui-form-item"> <label class="layui-form-label" for="storage.txcos_access_key"> <span class="color-green font-w7">访问密钥</span><br><span class="nowrap color-desc">AccessKey</span> diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index d7f33aecb..9a92730c6 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -893,12 +893,12 @@ "source": { "type": "git", "url": "https://github.com/zoujingli/ThinkLibrary.git", - "reference": "be1ddab224ab14d814ae120eebfb53b25808bbfa" + "reference": "19e53d5ea8335b706742cc4ff964ea8f5ce9b726" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/be1ddab224ab14d814ae120eebfb53b25808bbfa", - "reference": "be1ddab224ab14d814ae120eebfb53b25808bbfa", + "url": "https://api.github.com/repos/zoujingli/ThinkLibrary/zipball/19e53d5ea8335b706742cc4ff964ea8f5ce9b726", + "reference": "19e53d5ea8335b706742cc4ff964ea8f5ce9b726", "shasum": "", "mirrors": [ { @@ -915,7 +915,7 @@ "ext-mbstring": "*", "topthink/framework": "^6.0" }, - "time": "2020-10-15T03:06:04+00:00", + "time": "2020-10-15T05:41:07+00:00", "type": "library", "extra": { "think": { diff --git a/vendor/services.php b/vendor/services.php index 40723dae5..94937d863 100644 --- a/vendor/services.php +++ b/vendor/services.php @@ -1,5 +1,5 @@ <?php -// This file is automatically generated at:2020-10-15 11:40:03 +// This file is automatically generated at:2020-10-15 13:46:39 declare (strict_types = 1); return array ( 0 => 'think\\admin\\Library', diff --git a/vendor/zoujingli/think-library/src/storage/AliossStorage.php b/vendor/zoujingli/think-library/src/storage/AliossStorage.php index a5038abe0..53183ec5c 100644 --- a/vendor/zoujingli/think-library/src/storage/AliossStorage.php +++ b/vendor/zoujingli/think-library/src/storage/AliossStorage.php @@ -105,8 +105,7 @@ class AliossStorage extends Storage $data['OSSAccessKeyId'] = $this->accessKey; $data['success_action_status'] = '200'; if (is_string($attname) && strlen($attname) > 0) { - $filename = urlencode($attname); - $data['Content-Disposition'] = "inline;filename={$filename}"; + $data['Content-Disposition'] = 'inline;filename=' . urlencode($attname); } $file = ['field' => 'file', 'name' => $name, 'content' => $file]; if (is_numeric(stripos(HttpExtend::submit($this->upload(), $data, $file), '200 OK'))) { @@ -207,12 +206,12 @@ class AliossStorage extends Storage /** * 获取文件上传令牌 - * @param null|string $name 文件名称 + * @param string $name 文件名称 * @param integer $expires 有效时间 * @param null|string $attname 下载名称 * @return array */ - public function buildUploadToken(?string $name = null, int $expires = 3600, ?string $attname = null): array + public function buildUploadToken(string $name, int $expires = 3600, ?string $attname = null): array { $data = [ 'policy' => base64_encode(json_encode([ diff --git a/vendor/zoujingli/think-library/src/storage/TxcosStorage.php b/vendor/zoujingli/think-library/src/storage/TxcosStorage.php index 3a5242abc..d6932b150 100644 --- a/vendor/zoujingli/think-library/src/storage/TxcosStorage.php +++ b/vendor/zoujingli/think-library/src/storage/TxcosStorage.php @@ -20,12 +20,6 @@ class TxcosStorage extends Storage */ private $point; - /** - * 账号 AppID - * @var string - */ - private $appid; - /** * 存储空间名称 * @var string @@ -54,10 +48,9 @@ class TxcosStorage extends Storage protected function initialize() { // 读取配置文件 - $this->appid = sysconf('storage.txcos_appid'); $this->point = sysconf('storage.txcos_point'); $this->bucket = sysconf('storage.txcos_bucket'); - $this->secretId = sysconf('storage.txcos_secret_id'); + $this->secretId = sysconf('storage.txcos_access_key'); $this->secretKey = sysconf('storage.txcos_secret_key'); // 计算链接前缀 $type = strtolower(sysconf('storage.txcos_http_protocol')); @@ -92,16 +85,9 @@ class TxcosStorage extends Storage */ public function set(string $name, string $file, bool $safe = false, ?string $attname = null) { - $token = $this->buildUploadToken($name); - $data = ['key' => $name]; - $data['policy'] = $token['policy']; - $data['q-sign-algorithm'] = $token['q-sign-algorithm']; - $data['q-ak'] = $token['q-ak']; - $data['q-key-time'] = $token['q-key-time']; - $data['q-signature'] = $token['d-signature']; + $data = $this->buildUploadToken($name) + ['key' => $name]; if (is_string($attname) && strlen($attname) > 0) { - $filename = urlencode($attname); - $data['Content-Disposition'] = "inline;filename={$filename}"; + $data['Content-Disposition'] = '' . urlencode($attname); } $data['success_action_status'] = '200'; $file = ['field' => 'file', 'name' => $name, 'content' => $file]; @@ -132,7 +118,7 @@ class TxcosStorage extends Storage public function del(string $name, bool $safe = false) { [$file] = explode('?', $name); - $result = HttpExtend::request('DELETE', "http://{$this->bucket}-{$this->appid}.{$this->point}/{$file}", [ + $result = HttpExtend::request('DELETE', "http://{$this->bucket}.{$this->point}/{$file}", [ 'returnHeader' => true, 'headers' => $this->headerSign('DELETE', $file), ]); return is_numeric(stripos($result, '204 No Content')); @@ -147,7 +133,7 @@ class TxcosStorage extends Storage public function has(string $name, bool $safe = false) { $file = $this->delSuffix($name); - $result = HttpExtend::request('HEAD', "http://{$this->bucket}-{$this->appid}.{$this->point}/{$file}", [ + $result = HttpExtend::request('HEAD', "http://{$this->bucket}.{$this->point}/{$file}", [ 'returnHeader' => true, 'headers' => $this->headerSign('HEAD', $name), ]); return is_numeric(stripos($result, 'HTTP/1.1 200 OK')); @@ -198,17 +184,17 @@ class TxcosStorage extends Storage public function upload(): string { $protocol = $this->app->request->isSsl() ? 'https' : 'http'; - return "{$protocol}://{$this->bucket}-{$this->appid}.{$this->point}"; + return "{$protocol}://{$this->bucket}.{$this->point}"; } /** * 获取文件上传令牌 - * @param null|string $name 文件名称 + * @param string $name 文件名称 * @param integer $expires 有效时间 * @param null|string $attname 下载名称 * @return array */ - public function buildUploadToken(?string $name = null, int $expires = 3600, ?string $attname = null): array + public function buildUploadToken(string $name, int $expires = 3600, ?string $attname = null): array { $startTimestamp = time(); $endTimestamp = $startTimestamp + $expires; @@ -216,15 +202,12 @@ class TxcosStorage extends Storage $siteurl = $this->url($name, false, $attname); $policy = json_encode([ 'expiration' => date('Y-m-d\TH:i:s.000\Z', $endTimestamp), - 'conditions' => [['q-sign-algorithm' => 'sha1'], ['q-ak' => $this->secretId], ['q-sign-time' => $keyTime]], + 'conditions' => [['q-ak' => $this->secretId], ['q-sign-time' => $keyTime], ['q-sign-algorithm' => 'sha1']], ]); return [ - 'policy' => base64_encode($policy), - 'q-sign-algorithm' => 'sha1', - 'q-ak' => $this->secretId, - 'q-key-time' => $keyTime, - 'q-signature' => hash_hmac('sha1', sha1($policy), hash_hmac('sha1', $keyTime, $this->secretKey)), - 'siteurl' => $siteurl, + 'policy' => base64_encode($policy), 'q-ak' => $this->secretId, + 'siteurl' => $siteurl, 'q-key-time' => $keyTime, 'q-sign-algorithm' => 'sha1', + // 'q-signature' => hash_hmac('sha1', sha1($policy), hash_hmac('sha1', $keyTime, $this->secretKey)), ]; }