Browse Source

fix #1099 支持AWS S3 API

magicblack 10 months ago
parent
commit
dee5cb3fcf

+ 10 - 1
application/admin/controller/System.php

@@ -277,8 +277,12 @@ class System extends Base
 
     public function configupload()
     {
+        $phar_status = file_exists(ROOT_PATH . 'extend/aws/src/Aws/aws.phar');
         if (Request()->isPost()){
             $config = input('','','htmlentities');
+            if($config['upload']['mode'] == 'S3' && $phar_status == false){
+                return $this->error(lang('save_err'));
+            }
 
             $validate = \think\Loader::validate('Token');
             if(!$validate->check($config)){
@@ -299,7 +303,12 @@ class System extends Base
         }
 
         $this->assign('config', config('maccms'));
-
+        if ($phar_status) {
+            $aws_phar = 'Yes';
+        }else{
+            $aws_phar = 'No';
+        }
+        $this->assign('aws_phar',$aws_phar);
         $extends = mac_extends_list('upload');
         $this->assign('extends',$extends);
 

+ 26 - 0
application/admin/view/extend/upload/s3.html

@@ -0,0 +1,26 @@
+<div class="layui-form-item upload_mode mode_S3" {if condition="$config['upload']['mode'] neq 'S3'"}style="display:none;" {/if}>
+<label class="layui-form-label">S3:</label>
+<div class="layui-input-block">
+    <a href="https://aws.amazon.com/cn/s3" target="_blank" class="layui-btn layui-btn-primary">点击申请 https://aws.amazon.com/cn/s3</a>
+</div>
+<div class="layui-form-mid layui-word-aux">{:lang('admin/system/configupload/s3_info')} <a href="https://github.com/aws/aws-sdk-php/releases/tag/3.334.6" target="_blank"
+                                                                      class="layui-btn layui-btn-primary">{:lang('down')}</a>{:lang('admin/system/configupload/s3_save_path')}:extend/aws/src/Aws/aws.phar</div>
+</div>
+<div class="layui-form-item upload_mode mode_S3" {if condition="$config['upload']['mode'] neq 'S3'"}style="display:none;" {/if}>
+<label class="layui-form-label">Bucket:</label>
+<div class="layui-input-inline w200">
+    <input type="text" name="upload[api][s3][bucket]" placeholder="S3-bucket" value="{$config['upload']['api']['s3']['bucket']}" class="layui-input"  >
+</div>
+<label class="layui-form-label">Access key ID:</label>
+<div class="layui-input-inline w200">
+    <input type="text" name="upload[api][s3][accesskey]" placeholder="S3-Access Key" value="{$config['upload']['api']['s3']['accesskey']}" class="layui-input"  >
+</div>
+<label class="layui-form-label">Secret access key:</label>
+<div class="layui-input-inline w200">
+    <input type="text" name="upload[api][s3][secretkey]" placeholder="S3-Secret Key" value="{$config['upload']['api']['s3']['secretkey']}" class="layui-input"  >
+</div>
+<label class="layui-form-label">Region:</label>
+<div class="layui-input-inline w200">
+    <input type="text" name="upload[api][s3][region]" placeholder="S3-Region" value="{$config['upload']['api']['s3']['region']}" class="layui-input"  >
+</div>
+</div>

+ 48 - 0
application/common/extend/upload/S3.php

@@ -0,0 +1,48 @@
+<?php
+namespace app\common\extend\upload;
+
+use Aws\S3\S3Client;
+use Aws\Exception\AwsException;
+
+class S3
+{
+    public $name = 'S3';
+    public $ver = '1.0';
+    private $config = [];
+
+    public function __construct($config = []) {
+        $this->config = $config;
+    }
+
+    public function submit($file_path)
+    {
+        $bucket = $GLOBALS['config']['upload']['api']['s3']['bucket'];
+        $accessKey = $GLOBALS['config']['upload']['api']['s3']['accesskey'];
+        $secretKey = $GLOBALS['config']['upload']['api']['s3']['secretkey'];
+        $region = $GLOBALS['config']['upload']['api']['s3']['region'];
+
+        require_once ROOT_PATH . 'extend/aws/autoload.php';
+        $s3 = new S3Client([
+            'region'  => $region,
+            'version' => '2006-03-01',
+            'credentials' => [
+                'key'    => $accessKey,
+                'secret' => $secretKey
+            ]
+        ]);
+        try {
+            $filePath = ROOT_PATH . $file_path;
+            $result = $s3->putObject([
+                'Bucket' => $bucket,
+                'Key'    => $file_path,
+                'Body'   => fopen($filePath, 'r'),
+                'ACL'    => 'public-read'
+            ]);
+        } catch (AwsException $e) {
+            echo $e->getMessage() . "\n";
+        }
+
+        empty($this->config['keep_local']) && @unlink($filePath);
+        return $result['ObjectURL'];
+    }
+}

+ 2 - 0
application/lang/de-de.php

@@ -1343,6 +1343,8 @@ https://www.baidu.com/123.jpg',
     'admin/system/configupload/img_api_tip'=>'Endereço da API para processamento de imagens protegidas contra links diretos',
     'admin/system/configupload/keep_local'=>'Manter Localmente',
     'admin/system/configupload/keep_local_tip'=>'Selecione isso para manter uma cópia local após o carregamento para um local remoto',
+    'admin/system/configupload/s3_info'=>'Beim Verwenden von S3-Speicher stellen Sie sicher, dass die aws.phar-Datei heruntergeladen ist',
+    'admin/system/configupload/s3_save_path'=>'Nach dem Herunterladen bitte speichern als',
 
     'admin/system/configsms/title'=>'Configuração de Envio de SMS',
     'admin/system/configsms/tip'=>'Dicas:<br>

+ 2 - 0
application/lang/en-us.php

@@ -1324,6 +1324,8 @@ https://www.baidu.com/123.jpg',
     'admin/system/configupload/img_api_tip'=>'Interface address for handling anti-leeching images',
     'admin/system/configupload/keep_local'=>'Keep Local Copy',
     'admin/system/configupload/keep_local_tip'=>'If uploading to remote, keep a local copy after upload completion',
+    'admin/system/configupload/s3_info'=>'When using S3 storage, make sure the aws.phar file has been downloaded',
+    'admin/system/configupload/s3_save_path'=>'After downloading, please save as',
 
     'admin/system/configsms/title'=>'SMS Sending Configuration',
     'admin/system/configsms/tip'=>'Tip:<br>

+ 2 - 0
application/lang/es-es.php

@@ -1326,6 +1326,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/mode_remote'=>'Acceso Remoto',
     'admin/system/configupload/remoteurl'=>'URL Remota de Imágenes',
     'admin/system/configupload/remoteurl_tip'=>'Utilice esto si las imágenes locales están disponibles de manera remota',
+    'admin/system/configupload/s3_info'=>'Al utilizar el almacenamiento S3, asegúrese de que se haya descargado el archivo aws.phar',
+    'admin/system/configupload/s3_save_path'=>'Después de descargar, guarde como',
 
     'admin/system/configsms/title'=>'Configuración de Envío de SMS',
     'admin/system/configsms/tip'=>'Consejo:<br> Asegúrese de configurar la firma y el contenido del SMS según lo requiera el proveedor del servicio de interfaz SMS.',

+ 2 - 0
application/lang/fr-fr.php

@@ -1334,6 +1334,8 @@ https://www.baidu.com/123.jpg',
     'admin/system/configupload/img_api_tip' => 'Adresse de l\'interface pour traiter les images protégées contre le lien',
     'admin/system/configupload/keep_local' => 'Garder local',
     'admin/system/configupload/keep_local_tip' => 'Si vous choisissez de télécharger à distance, une copie locale sera conservée après le téléchargement',
+    'admin/system/configupload/s3_info'=>'Lors de l\'utilisation du stockage S3, assurez-vous que le fichier aws.phar est téléchargé',
+    'admin/system/configupload/s3_save_path'=>'Après le téléchargement, veuillez enregistrer sous',
 
     'admin/system/configsms/title' => 'Configuration d\'envoi de SMS',
     'admin/system/configsms/tip' => 'Informations importantes:<br>

+ 2 - 0
application/lang/ja-jp.php

@@ -1339,6 +1339,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/img_api_tip'=>'ホットリンク防止画像を処理するインターフェースアドレス',
     'admin/system/configupload/keep_local'=>'ローカルに保持',
     'admin/system/configupload/keep_local_tip'=>'リモートへのアップロードを選択した場合、アップロードが完了した後もローカルにコピーが保持されます',
+    'admin/system/configupload/s3_info'=>'S3ストレージを使用する場合、aws.pharファイルがダウンロードされていることを確認してください',
+    'admin/system/configupload/s3_save_path'=>'ダウンロード後は',
 
     'admin/system/configsms/title'=>'SMS送信構成',
     'admin/system/configsms/tip'=>'ヒント情報:<br>

+ 2 - 0
application/lang/ko-kr.php

@@ -1339,6 +1339,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/img_api_tip'=>'핫링크 방지 이미지를 처리하는 인터페이스 주소',
     'admin/system/configupload/keep_local'=>'로컬 유지',
     'admin/system/configupload/keep_local_tip'=>'원격으로 업로드하도록 선택하면 업로드가 완료된 후 로컬에도 복사본이 유지됩니다.',
+    'admin/system/configupload/s3_info'=>'S3 저장소를 사용할 때는 aws.phar 파일이 다운로드 되었는지 확인하십시오',
+    'admin/system/configupload/s3_save_path'=>'다운로드 후 다음 파일 형식으로 저장하십시오',
 
     'admin/system/configsms/title'=>'SMS 전송 구성',
     'admin/system/configsms/tip'=>'팁 정보: <br>

+ 2 - 0
application/lang/pt-pt.php

@@ -1339,6 +1339,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/img_api_tip'=>'Endereço da interface para lidar com imagens anti-hotlink',
     'admin/system/configupload/keep_local'=>'Manter local',
     'admin/system/configupload/keep_local_tip'=>'Se você optar por fazer upload para remoto, uma cópia também será mantida localmente após o upload ser concluído',
+    'admin/system/configupload/s3_info'=>'Ao usar o armazenamento S3, certifique-se de que o arquivo aws.phar foi baixado.',
+    'admin/system/configupload/s3_save_path'=>'Após baixar, por favor salve como',
 
     'admin/system/configsms/title'=>'Configuração de envio de SMS',
     'admin/system/configsms/tip'=>'Informações de dica: <br>

+ 2 - 0
application/lang/zh-cn.php

@@ -1340,6 +1340,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/img_api_tip'=>'处理防盗链图片的接口地址',
     'admin/system/configupload/keep_local'=>'保留本地',
     'admin/system/configupload/keep_local_tip'=>'如果选择上传到远程,上传完成后,本地也将保留一份',
+    'admin/system/configupload/s3_info'=>'使用s3存储请确保已经下载好aws.phar文件',
+    'admin/system/configupload/s3_save_path'=>'下载后请保存为',
 
     'admin/system/configsms/title'=>'短信发送配置',
     'admin/system/configsms/tip'=>'提示信息:<br>

+ 2 - 0
application/lang/zh-tw.php

@@ -1340,6 +1340,8 @@ https://www.baidu.com/123.jpg
     'admin/system/configupload/img_api_tip'=>'處理防盜鏈圖片的接口地址',
     'admin/system/configupload/keep_local'=>'保留本地',
     'admin/system/configupload/keep_local_tip'=>'如果選擇上傳到遠程,上傳完成後,本地也將保留一份',
+    'admin/system/configupload/s3_info'=>'使用S3 儲存請確保已下載好aws.phar檔案',
+    'admin/system/configupload/s3_save_path'=>'下載後請儲存為',
 
     'admin/system/configsms/title'=>'短信發送配置',
     'admin/system/configsms/tip'=>'提示信息:<br>

+ 3 - 1
extend/.gitignore

@@ -1,2 +1,4 @@
 *
-!.gitignore
+!.gitignore
+!/aws/
+!/aws/*

+ 2 - 0
extend/aws/autoload.php

@@ -0,0 +1,2 @@
+<?php
+require_once  __DIR__ . '/src/Aws/aws.phar';