| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | <?phpnamespace 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, $expired = 3500)    {        $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 = "";        $timestamp = $timeStamp + $expired;        if(! file_exists($localFilePath)){            $url = $this->createUrl($objectKey,$expired);            $set = [                'url' => $url,                'timestamp' => $timestamp,            ];            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,$expired);                $set = [                    'url' => $url,                    'timestamp' => $timestamp,                ];                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;    }    // 阿里云上是否存在图片    public function isIsset($objectKey){        // 初始化OSS客户端        $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);        if ($ossClient->doesObjectExist($this->bucket, $objectKey)) return true;        return false;    }}
 |