cqpCow 10 months ago
parent
commit
859008dc5b
2 changed files with 141 additions and 0 deletions
  1. 132 0
      app/Service/OssService.php
  2. 9 0
      config/aliyun.php

+ 132 - 0
app/Service/OssService.php

@@ -0,0 +1,132 @@
+<?php
+
+namespace App\Service;
+
+use OSS\Core\OssException;
+use OSS\OssClient;
+
+class OssService extends Service
+{
+    protected $accessKeyId;
+    protected $accessKeySecret;
+    protected $endpoint;
+    protected $bucket;
+
+    public function __construct()
+    {
+        $this->accessKeyId = config('aliyun.accessKeyId');
+        $this->accessKeySecret = config('aliyun.accessKeySecret');
+        $this->endpoint = config('aliyun.endpoint');
+        // 存储空间名称
+        $this->bucket = config('aliyun.ossBucket');
+    }
+
+    /**
+     * @desc 添加文件
+     * @param $filePath 上传的文件
+     * @param $savePath 保存到oss的路径
+     */
+    public function uploadFile($filePath, $savePath)
+    {
+        try {
+            $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
+            $ossClient->uploadFile($this->bucket, $savePath, $filePath);
+        } catch (OssException $e) {
+            return [false, $e->getMessage()];
+        }
+        return [true, ''];
+    }
+
+    /**
+     * @desc 删除文件
+     * @param deletePath oss的路径
+     */
+    public function deleteFile($deletePath)
+    {
+        try {
+            $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
+            $ossClient->deleteObject($this->bucket, $deletePath);
+        } catch (OssException $e) {
+            return [false, $e->getMessage()];
+        }
+        return [true, ''];
+    }
+
+    /**
+     * @desc 下载文件
+     * @param string $downLoadFile 下载文件地址
+     * @param string $saveFile 保存地址
+     */
+    public function downLoadFile($downLoadFile, $saveFile)
+    {
+        $localfile = $saveFile;
+        $options = array(
+            OssClient::OSS_FILE_DOWNLOAD => $localfile
+        );
+        try {
+            $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
+            $ossClient->getObject($this->bucket, $downLoadFile, $options);
+        } catch (OssException $e) {
+            return [false, 'msg' => $e->getMessage()];
+        }
+        return [true, ''];
+    }
+
+    //生成临时文件
+    public function getTemporaryUrl($objectKey)
+    {
+        $timeStamp = time();
+
+        // 定义本地文件日志路径
+        $localFilePath = storage_path('app/public/oss_file/' . md5($objectKey) . '.txt');
+
+        $directoryPath = dirname($localFilePath);
+        // 检查目录是否存在,如果不存在则创建
+        if (! is_dir($directoryPath)) {
+            // 设置目录权限,可以根据需要更改
+            $mode = 0777;
+            // 使用递归选项创建目录
+            if (!mkdir($directoryPath, $mode, true)) return [false, '目录创建失败'];
+        }
+
+        $url = "";
+        if(! file_exists($localFilePath)){
+            $url = $this->createUrl($objectKey);
+            $set = [
+                'url' => $url,
+                'timestamp' => $timeStamp + 3500,
+            ];
+            file_put_contents($localFilePath, json_encode($set));
+        }else{
+            $content = file_get_contents($localFilePath);
+            $content = json_decode($content,true);
+            if($content['timestamp'] < $timeStamp){
+                $url = $this->createUrl($objectKey);
+                $set = [
+                    'url' => $url,
+                    'timestamp' => $timeStamp + 3500,
+                ];
+                file_put_contents($localFilePath, json_encode($set));
+            }else{
+                $url = $content['url'];
+            }
+        }
+
+        return [true, $url];
+    }
+
+    public function createUrl($objectKey, $expiration = 3600){
+        // 初始化OSS客户端
+        $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);
+
+        // 生成临时链接
+        $url = $ossClient->signUrl(
+            $this->bucket,
+            $objectKey,
+            $expiration,
+            'GET' // 可选,指定HTTP方法,默认为 GET
+        );
+
+        return $url;
+    }
+}

+ 9 - 0
config/aliyun.php

@@ -0,0 +1,9 @@
+<?php
+
+return [
+   "accessKeyId" => "LTAI4FpRVTjHoXuZh5Q5pLHH",
+   "accessKeySecret" => "8cuJ3RZBH5bmce92ofwY9WJGayyOCt",
+   "endpoint" => "oss-cn-hangzhou.aliyuncs.com",
+   "ossBucket" => "qingyaoss",
+];
+