소스 검색

七牛上传设置

liuzejian 2 년 전
부모
커밋
f8f4969842

+ 1 - 0
modules/Common/Errors/Errors.php

@@ -8,4 +8,5 @@ class Errors
     public const  USER_NOT_FOUND= [500002, '用户不存在'];
     public const  NO_OPERATE_PERMISSION= [500003, '用户无操作权限'];
     public const  VIDEO_NOT_EXISTS= [500004, '视频不存在'];
+    public const  UPLOAD_IMAGE_ERROR= [500005, '上传图片不成功'];
 }

+ 31 - 0
modules/Common/Http/Controllers/Qiniu/CallbackController.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace Modules\Common\Http\Controllers\Qiniu;
+
+use Illuminate\Http\Request;
+use Qiniu\Auth;
+
+class CallbackController
+{
+    public function uploadToken(Request $request) {
+        $qiniuConfig = config('common.qiniu');
+
+        $auth = new Auth($qiniuConfig['accessKey'], $qiniuConfig['secretKey']);
+        $expires = 7200;
+        $policy  = [
+            'scope' => $qiniuConfig['bucket'],
+            'callbackUrl' => config('common.common.duanjuManageDomain') . '/api/qiniu/upload/callback',
+            'callbackBody' => '{"key":"$(key)", "avinfo":"$(avinfo)"}',
+            'callbackBodyType' => 'application/json',
+            'forceSaveKey' => true,
+            'saveKey' => '$(etag).$($ext)',
+        ];
+        $upToken = $auth->uploadToken($qiniuConfig['bucket'], null, $expires, $policy, true);
+        return $upToken;
+    }
+
+    public function callback(Request $request) {
+        myLog('qiniu-log', $request->all());
+        return 1;
+    }
+}

+ 33 - 0
modules/Common/Http/Controllers/Qiniu/ImageUploadController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Modules\Common\Http\Controllers\Qiniu;
+
+use Catch\Base\CatchController;
+use Illuminate\Http\Request;
+use Illuminate\Support\Str;
+use Modules\Common\Errors\Errors;
+use Modules\Common\Exceptions\CommonBusinessException;
+use Qiniu\Auth;
+use Qiniu\Storage\UploadManager;
+
+class ImageUploadController extends CatchController
+{
+    public function uploadImage(Request $request) {
+        $file = $request->photo;
+        $qiniuConfig = config('common.qiniu');
+
+        $auth = new Auth($qiniuConfig['accessKey'], $qiniuConfig['secretKey']);
+        $token = $auth->uploadToken(config('common.qiniu.bucket'));
+        $filePath = $file->path();
+        $key = 'uploads'.DIRECTORY_SEPARATOR.'images'. DIRECTORY_SEPARATOR . date('Ymd') .
+            DIRECTORY_SEPARATOR. Str::random(10) . time() . '.'. $file->extension();
+        $uploadMgr = new UploadManager();
+        list($ret, $err) =  $uploadMgr->putFile($token, $key, $filePath, null, 'application/octet-stream',
+            true, null, 'v2');
+        if($err !== null) {
+            CommonBusinessException::throwError(Errors::UPLOAD_IMAGE_ERROR);
+        } else {
+            return $qiniuConfig['linkDomain']. DIRECTORY_SEPARATOR . $key;
+        }
+    }
+}

+ 5 - 1
modules/Common/config/common.php

@@ -5,5 +5,9 @@ return [
         '2' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/DOUYIN.png',
         '1' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/WEIXIN.png',
         'QQ' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/QQ.png',
-    ]
+    ],
+    /**
+     * 短剧管理后台的域名
+     */
+    'duanjuManageDomain' => env('COMMON_DUANJU_MANAGE_DOMAIN', 'http://m.test.duanju.dududus.com'),
 ];

+ 14 - 0
modules/Common/config/qiniu.php

@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * 七牛云相关配置
+ */
+return [
+    'accessKey' => env('QINIU_ACCESS_KEY', '0KPbNSpF0svREUWzxYn33FydQpcDCiYun2HLdtQ7'),
+    'secretKey' => env('QINIU_SECRET_KEY', 'VkA1ej1bFzPK-N-B-H_IHt6I0Z2RYRU_ivvn7ObR'),
+    'bucket' => env('QINIU_BUCKET', 'zyduanju'),
+    /**
+     * 资源链接域名
+     */
+    'linkDomain' => env('QINIU_LINK_DOMAIN', ''),
+];

+ 8 - 0
modules/Common/routes/route.php

@@ -3,6 +3,8 @@
 use Illuminate\Support\Facades\Route;
 use Modules\Common\Http\Controllers\ModuleController;
 use Modules\Common\Http\Controllers\OptionController;
+use Modules\Common\Http\Controllers\Qiniu\CallbackController;
+use Modules\Common\Http\Controllers\Qiniu\ImageUploadController;
 use Modules\Common\Http\Controllers\UploadController;
 
 /*
@@ -27,4 +29,10 @@ Route::controller(UploadController::class)->group(function (){
 
 Route::get('modules/listApp', [ModuleController::class, 'listApp']);
 
+Route::prefix('qiniu')->group(function() {
+    Route::get('upload/token', [CallbackController::class, 'uploadToken']);
+    Route::post('upload/callback', [CallbackController::class, 'callback'])->withoutMiddleware(config('catch.route.middlewares'));
+    Route::post('upload/image', [ImageUploadController::class, 'uploadImage']);
+});
+
 

+ 19 - 0
tests/Common/Http/Controllers/Qiniu/CallbackControllerTest.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace Tests\Common\Http\Controllers\Qiniu;
+
+use Modules\Common\Http\Controllers\Qiniu\CallbackController;
+use PHPUnit\Framework\TestCase;
+use Tests\UsedTestCase;
+
+class CallbackControllerTest extends UsedTestCase
+{
+
+    public function testUploadToken()
+    {
+        $res = $this->withHeaders([
+            'Authorization' => 'Bearer '. $this->token,
+        ])->json('get','http://localhost/api/qiniu/upload/token');
+        $res->dump();
+    }
+}

+ 28 - 0
tests/Common/Http/Controllers/Qiniu/ImageUploadControllerTest.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace Tests\Common\Http\Controllers\Qiniu;
+
+use Illuminate\Http\UploadedFile;
+use Illuminate\Support\Facades\Storage;
+use Modules\Common\Http\Controllers\Qiniu\ImageUploadController;
+use PHPUnit\Framework\TestCase;
+use Tests\UsedTestCase;
+
+class ImageUploadControllerTest extends UsedTestCase
+{
+
+    public function testUpload()
+    {
+        Storage::fake('avatars');
+
+        $file = UploadedFile::fake()->image('avatar.jpg');
+
+        $response = $this->withHeaders([
+            'Authorization' => 'Bearer '. $this->token,
+        ])->post('/api/qiniu/upload/image', [
+            'photo' => $file,
+        ]);
+
+        $response->dump();
+    }
+}