Explorar el Código

调整腾讯云COS文件上传

Anyon hace 4 años
padre
commit
e34ceb9956

+ 0 - 1
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();
         }

+ 0 - 1
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);

+ 1 - 1
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'}

+ 4 - 14
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>
 
@@ -65,16 +65,6 @@
         </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>
             </label>

+ 4 - 4
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": {

+ 1 - 1
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',

+ 3 - 4
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([

+ 12 - 29
vendor/zoujingli/think-library/src/storage/TxcosStorage.php

@@ -21,12 +21,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)),
         ];
     }