Przeglądaj źródła

Merge branch 'master' into release

wzq 5 lat temu
rodzic
commit
0b13557b89

+ 58 - 0
app/Http/Controllers/OssController.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Http\Controllers;
+use AliCloud\Core\Profile\DefaultProfile;
+use AliCloud\Core\DefaultAcsClient;
+use AliCloud\Core\Exception\ServerException;
+use AliCloud\Core\Exception\ClientException;
+use AliCloud\STS\AssumeRoleRequest;
+
+class OssController extends Controller
+{
+    public function getSts()
+    {
+        $regionID = "cn-zhangjiakou";
+        $endpoint = "sts.cn-zhangjiakou.aliyuncs.com";
+        DefaultProfile::addEndpoint($regionID, $regionID, "Sts", $endpoint);
+        $iClientProfile = DefaultProfile::getProfile($regionID, 'LTAIG3B3vMgxdnGg', 'EJY6vwMje1npqZYmIwrmUWlVTiVW18');
+        $client = new DefaultAcsClient($iClientProfile);
+        // 指定角色ARN
+        $roleArn = "acs:ram::1211062998797452:role/ramoss-sts";
+        // 在扮演角色时,添加一个权限策略,进一步限制角色的权限
+        // 以下权限策略表示拥有可以读取所有OSS的只读权限
+$policy = <<<POLICY
+        {
+          "Statement": [
+            {
+              "Action": [
+                "oss:Get*",
+                "oss:List*"
+              ],
+              "Effect": "Allow",
+              "Resource": "*"
+            }
+          ],
+          "Version": "1"
+        }
+POLICY;
+        $request = new AssumeRoleRequest();
+        // RoleSessionName即临时身份的会话名称,用于区分不同的临时身份
+        $request->setRoleSessionName("alice");
+        $request->setRoleArn($roleArn);
+        $request->setPolicy($policy);
+        $request->setDurationSeconds(3600);
+        try {
+            $response = $client->getAcsResponse($request);
+            $result['region'] = $regionID;
+            $result['accessKeyId'] = $response->Credentials->AccessKeyId;
+            $result['accessKeySecret'] = $response->Credentials->AccessKeySecret;
+            $result['stsToken'] = $response->Credentials->SecurityToken;
+            $result['bucket'] = 'uptoyo';
+            return $result;
+        } catch (ServerException $e) {
+            return $this->response->error($e->getMessage(), 500);
+        } catch (ClientException $e) {
+            return $this->response->error($e->getMessage(), 500);
+        }
+    }
+}

+ 64 - 0
app/Http/Controllers/UploadController.php

@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
 use Intervention\Image\Facades\Image;
+use Illuminate\Support\Facades\Validator;
+use Tymon\JWTAuth\Facades\JWTAuth;
 
 class UploadController extends Controller
 {
@@ -46,6 +48,7 @@ class UploadController extends Controller
         }
     }
 
+
     public function uploadImages(Request $request)
     {
         $path = $request->get('path') ? $request->get('path') . '/' : date('Ym') . '/';
@@ -112,4 +115,65 @@ class UploadController extends Controller
             return '仅支持mp3上传,请重试';
         }
     }
+
+    /**
+     * 处理批量上传
+     */
+    public function uploadImagesChange(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'imgs' => 'required_if:type,image|array|max:9',
+            'imgs.*' => 'required|url',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $data = [];
+        foreach($request['imgs'] as $img){
+            $res = $this->uploadOneImage($img);
+            if(!isset($res['data']['url'])){
+                return $this->response->error('上传失败,请重试', 500);
+            }
+            $data[] = config('customer.chxq_oss_url').$res['data']['url'];
+        }
+        return  [
+            'data' => $data
+        ];
+    }
+
+    public function uploadOneImage($img) {
+        $path = public_path('image');
+        if (!file_exists($path)){
+            mkdir ($path,0777,true);
+        }
+        $fileUrl = $path.date('/Ymd').time(). uniqid() .'.jpg';
+        $content = file_get_contents($img);
+        file_put_contents($fileUrl, $content);
+
+
+        try {
+            $url = config("customer.manage_service_url").'/config/upload';
+            $array = [
+                'multipart' => [
+                    [
+                        'name'     => 'image',
+                        'contents' => fopen($fileUrl, 'r'),
+                        'headers'  => ['X-Baz' => 'bar'],
+                        'filename' => $fileUrl
+                    ]
+                ],
+                'query' => [],
+                'http_errors' => false,
+                'headers'=>['Authorization'=>"Bearer ".JWTAuth::getToken()]
+            ];
+            $client = new \GuzzleHttp\Client();
+            $response = $client->request('post', $url, $array);
+            $result = json_decode($response->getBody()->getContents(), true);
+        } catch (\Exception $e) {
+            $result = '';
+        }
+        unlink($fileUrl);
+        return $result;
+
+    }
 }

+ 3 - 0
composer.json

@@ -7,12 +7,15 @@
     "require": {
         "php": ">=7.1.3",
         "acekyd/laravelmp3": "^1.0",
+        "alibabacloud/sdk": "^1.7",
+        "aliyuncs/oss-sdk-php": "^2.3",
         "dingo/api": "^2.2",
         "doctrine/dbal": "^2.9",
         "guzzlehttp/guzzle": "^6.3",
         "hhxsv5/laravel-s": "~3.4.0",
         "intervention/image": "^2.4",
         "jeroendesloovere/distance": "1.0.2.1",
+        "jiajialu/aliyun-sdk-sts": "^3.0",
         "junliuxian/ali-oss-storage": "~2.0",
         "laravel/lumen-framework": "5.8.*",
         "multilinguals/apollo-client": "^0.1.2",

+ 3 - 0
routes/api.php

@@ -27,6 +27,9 @@ $api->version('v1', [
         $api->post('upload', 'UploadController@uploadImage');
         $api->post('multi_upload', 'UploadController@uploadImages');
         $api->post('upload/mp3', 'UploadController@uploadMp3');
+        $api->get('getsts', 'OssController@getSts');
+
+        $api->post('multi_upload_change', 'UploadController@uploadImagesChange');
 
         //自提点列表
         $api->get('/pickupNode/index', 'ConfigPickupNodeController@index');