From 1dbc5e1168f82def1935e679acd3a18f86a5f9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BB=BA=E6=98=8E=20=E6=B2=88?= <2431685932@qq.com> Date: Wed, 10 Jul 2024 14:38:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=83=E7=89=9B=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pom.xml | 7 + .../SchisandraOssFtpController.java | 28 ++- .../SchisandraOssQiniuController.java | 210 +++++++++++++++++- .../dto/SchisandraOssQiniuDTO.java | 2 + .../oss/core/qiniu/QiNiuOssClient.java | 183 +++++++++++++-- .../oss/core/qiniu/QiNiuOssConfiguration.java | 47 +++- .../oss/core/qiniu/model/QiNiuOssConfig.java | 3 +- .../oss/domain/bo/SchisandraOssQiniuBO.java | 1 + .../mapper/SchisandraOssQiniuDao.xml | 1 + 9 files changed, 447 insertions(+), 35 deletions(-) diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/pom.xml b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/pom.xml index 961a64b..ad35d0e 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/pom.xml +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/pom.xml @@ -91,5 +91,12 @@ schisandra-cloud-storage-asyncTool 1.4.1-SNAPSHOT + + + com.qiniu + qiniu-java-sdk + 7.13.0 + + diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssFtpController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssFtpController.java index 1957524..cffbba8 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssFtpController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssFtpController.java @@ -1,18 +1,21 @@ package com.schisandra.oss.application.controller; +import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.google.common.base.Preconditions; import com.schisandra.oss.application.convert.SchisandraOssFtpDTOConverter; import com.schisandra.oss.application.dto.SchisandraOssFtpDTO; +import com.schisandra.oss.application.oss.core.ftp.FtpOssClient; +import com.schisandra.oss.application.oss.model.OssInfo; import com.schisandra.oss.common.entity.Result; import com.schisandra.oss.domain.bo.SchisandraOssFtpBO; import com.schisandra.oss.domain.service.SchisandraOssFtpDomainService; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; /** * ftp存储配置表 controller @@ -157,4 +160,21 @@ public class SchisandraOssFtpController { } + /** + * @description: 上传文件 + * @param: [schisandraOssFTPDTO] + * @return: void + * @date: 2024/6/26 14:34 + */ + @PostMapping("uploadFtpFile") + public Result uploadAliFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException { + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(fileName, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + // 获取文件输入流 + InputStream is = file.getInputStream(); + FtpOssClient bean = SpringUtil.getBean(userId); + return Result.ok(bean.upLoad(is, fileName, true)); + } + } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssQiniuController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssQiniuController.java index 6243587..e14e112 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssQiniuController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssQiniuController.java @@ -1,18 +1,25 @@ package com.schisandra.oss.application.controller; +import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.google.common.base.Preconditions; import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter; import com.schisandra.oss.application.dto.SchisandraOssQiniuDTO; +import com.schisandra.oss.application.oss.core.qiniu.QiNiuOssClient; +import com.schisandra.oss.application.oss.core.qiniu.QiNiuOssConfiguration; +import com.schisandra.oss.application.oss.model.OssInfo; import com.schisandra.oss.common.entity.Result; import com.schisandra.oss.domain.bo.SchisandraOssQiniuBO; import com.schisandra.oss.domain.service.SchisandraOssQiniuDomainService; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; /** * 七牛云对象存储配置表 controller @@ -27,6 +34,201 @@ public class SchisandraOssQiniuController { @Resource private SchisandraOssQiniuDomainService schisandraOssQiniuDomainService; + @Resource + private QiNiuOssConfiguration qiNiuOssConfiguration; + + /** + * @description: 获取文件目录信息 + * @param: [target, userId, dirName] + * @return: com.schisandra.oss.common.entity.Result + * @date: 2024/6/26 13:55 + */ + @GetMapping("listQiniuDir") + public Result listQiniuInfo(@RequestParam String userId, @RequestParam String prefix, @RequestParam String bucket) throws Exception { + Preconditions.checkNotNull(userId, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + return Result.ok(bean.listfile(bucket, prefix)); + } + + /** + * @description: 重命名文件 + * @param: [userId, bucket, oldFileName, newFileName] + * @return: com.schisandra.oss.common.entity.Result + * @author zlg + * @date: 2024/6/27 9:41 + */ + @PostMapping("renameQiniuFile") + public Result renameQiniuFile(@RequestParam String userId, @RequestParam String bucket, @RequestParam String oldFileName, @RequestParam String newFileName) throws IOException { + + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + Preconditions.checkNotNull(oldFileName, "不能为空"); + Preconditions.checkNotNull(newFileName, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + try { + bean.rename(oldFileName, newFileName); + }catch (Exception e){ + return Result.fail(e.getMessage()); + } + return Result.ok(); + } + + + /** + * @description: 拷贝文件 + * @param: [userId, bucket, oldFilePath, newFilePath] + * @return: com.schisandra.oss.common.entity.Result + * @author zlg + * @date: 2024/6/27 9:52 + */ + @PostMapping("copyQiniuFile") + public Result copyQiniuFile(@RequestParam String userId, @RequestParam String bucket, @RequestParam String oldFilePath, @RequestParam String newFilePath) throws IOException { + + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + Preconditions.checkNotNull(oldFilePath, "不能为空"); + Preconditions.checkNotNull(newFilePath, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + try { + bean.copy(oldFilePath, newFilePath); + }catch (Exception e){ + return Result.fail(e.getMessage()); + } + return Result.ok(); + } + + + /** + * @description: 下载文件 + * @param: [schisandraOssMinioDTO] + * @return: void + * @author sjm + * @date: 2024/7/8 13:56 + */ + @GetMapping("downloadQiniuFile") + public void download_open(@RequestParam String userId,@RequestParam String endpoint, @RequestParam String filename,HttpServletResponse response) throws IOException { + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setEndpoint(endpoint); + ServletOutputStream output = response.getOutputStream(); + + + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/vnd.ms-excel"); + response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8")); + bean.downLoad_open(output,filename,endpoint); + } + + + /** + * @description: 删除文件 + * @param: [schisandraOssMinioDTO] + * @return: void + * @date: 2024/7/8 14:34 + */ + @PostMapping("deleteQiniuFile") + public Result deleteQiniuFile(@RequestParam String bucket, @RequestParam String userId, @RequestParam String filePath) { + Preconditions.checkNotNull(bucket, "不能为空"); + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(filePath, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + bean.delete(filePath); + return Result.ok(); + } + + + /** + * @description: 上传文件 + * @param: [schisandraOssMinioDTO] + * @return: void + * @date: 2024/7/8 14:34 + */ + @PostMapping("uploadQiniuFile") + public Result uploadQiniuFile(@RequestParam String userId, @RequestParam MultipartFile file, @RequestParam String fileName, @RequestParam String bucket) throws IOException { + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(fileName, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + // 获取文件输入流 + InputStream is = file.getInputStream(); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + return Result.ok(bean.upLoad(is, fileName, true)); + } + + + /** + * @description: 获取所有bucket + * @param: [userId, bucket] + * @return: com.schisandra.oss.common.entity.Result + * @date: 2024/7/8 17:37 + */ + @GetMapping("seleteBucket") + public Result seleteBucket(@RequestParam String userId) { + Preconditions.checkNotNull(userId, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + return Result.ok(bean.selectAllBucket()); + } + + /** + * @description: 删除bucket + * @param: [userId, bucket] + * @return: com.schisandra.oss.common.entity.Result + * @date: 2024/7/8 17:38 + */ + @PostMapping("deleteBucket") + public Result deleteBucket(@RequestParam String userId, @RequestParam String bucket) { + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + return Result.ok(bean.deleteBucket(bucket)); + } + + /** + * 创建桶createbucket + * @param userId + * @param bucket + * @return + */ + @PostMapping("createBucket") + public Result createBucket(@RequestParam String userId, @RequestParam String bucket,@RequestParam String region) { + Preconditions.checkNotNull(userId, "不能为空"); + Preconditions.checkNotNull(bucket, "不能为空"); + QiNiuOssClient bean = SpringUtil.getBean(userId); + bean.getQiNiuOssConfig().setBucketName(bucket); + bean.getQiNiuOssConfig().setRegion(region); + try { + return Result.ok(bean.createBucket(bucket,region)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * @description: qiniu 初始化 + * @param: [] + * @return: void + * @date: 2024/7/8 13:34 + */ + @PostMapping("init") + public void initQiniu(@RequestParam String userId) { + if (log.isInfoEnabled()) { + log.info("SchisandraOssMinioController.init.userId:{}", userId); + } + Preconditions.checkNotNull(userId, "用户id不能为空!"); + + Result result = qiNiuOssConfiguration.qiNiuOssClient(userId); + if (result != null) { + log.info("用户: {}-> qiniu 初始化完成!", userId); + } else { + log.error("用户: {}-> qiniu 初始化失败!", userId); + } + } + + /** * 新增七牛云对象存储配置表 diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/dto/SchisandraOssQiniuDTO.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/dto/SchisandraOssQiniuDTO.java index 1c9f97d..b99c743 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/dto/SchisandraOssQiniuDTO.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/dto/SchisandraOssQiniuDTO.java @@ -169,5 +169,7 @@ public class SchisandraOssQiniuDTO implements Serializable { */ private String checkBucket; + private String endpoint; + } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssClient.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssClient.java index a237bb8..da46862 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssClient.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssClient.java @@ -4,16 +4,14 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.file.FileNameUtil; +import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.qiniu.common.QiniuException; -import com.qiniu.storage.BucketManager; -import com.qiniu.storage.Configuration; -import com.qiniu.storage.DownloadUrl; -import com.qiniu.storage.UploadManager; +import com.qiniu.storage.*; import com.qiniu.storage.model.FileInfo; import com.qiniu.storage.model.FileListing; import com.qiniu.storage.persistent.FileRecorder; @@ -34,21 +32,21 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.io.*; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.*; + +import static com.aliyuncs.utils.Base64Helper.encode; /** + * @author zlg * @description: qiniu oss client * @param: * @return: - * @author zlg * @date: 2024/6/25 14:00 */ @Slf4j @@ -62,11 +60,165 @@ public class QiNiuOssClient implements StandardOssClient { public static final String BUCKET_OBJECT_NAME = "bucketManager"; private Auth auth; + private UploadManager uploadManager; private BucketManager bucketManager; private QiNiuOssConfig qiNiuOssConfig; private Configuration configuration; + /* + * 将时间转换为时间戳 + */ + @SneakyThrows + public static long dateToStamp(String s) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = simpleDateFormat.parse(s); + long ts = date.getTime(); + return ts; + } + + /** + * @description: 获取目录文件信息 + * @param: [bucket, prefix] delimiter 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串 + * @return: java.util.List + * @date: 2024/6/26 13:34 + */ + public List listfile(String bucket, String prefix) { + String delimiter = ""; + + + BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, 1000, delimiter); + List infos = new ArrayList<>(); + while (fileListIterator.hasNext()){ + FileInfo[] items = fileListIterator.next(); + for (FileInfo item : items) { + OssInfo info = new OssInfo(); + info.setPath(item.key); + info.setLength(DataSizeUtil.format(item.fsize)); + + String[] split_path = item.key.split("/"); + String[] split_path1 = split_path[split_path.length-1].split("\\."); + if(split_path.length >= 2 && split_path1.length >= 2){ + info.setIsDir(false); + info.setName(split_path[split_path.length-1]); + }else if(split_path.length >= 2){ + info.setIsDir(true); + info.setName(split_path[split_path.length-1]); + }else if(split_path.length < 2 && split_path1.length < 2){ + info.setIsDir(true); + info.setName(item.key); + }else{ + info.setIsDir(false); + info.setName(item.key); + } + + info.setCreateTime(String.valueOf(item.putTime)); + System.out.println(item.key); + infos.add(info); + } + } + return infos; + } + + /** + * 七牛图片下载 + * + * @param os targetName endpoint + * @param endpoint + * @return + */ + @SneakyThrows + public void downLoad_open(OutputStream os, String targetName,String endpoint) { + String filename = URLEncoder.encode(targetName,"UTF-8").replace("+", "%20"); + DownloadUrl downloadUrl = new DownloadUrl(endpoint, false, getKey(filename, false)); + try { + String url = downloadUrl.buildURL(); + HttpUtil.download(url, os, false); + } catch (QiniuException e) { + String errorMsg = String.format("%s下载失败", targetName); + log.error(errorMsg, e); + throw new OssException(errorMsg, e); + } + } + + @SneakyThrows + public String[] selectAllBucket() { + String[] buckets = bucketManager.buckets(); + + return buckets; + } + + + @SneakyThrows + public Integer deleteBucket(String bucketName) { + + String path = "/drop/" + bucketName + "\n"; + String access_token = auth.sign(path); + + + String url = "http://rs.qiniu.com/drop/" + bucketName; + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder().url(url).addHeader("Content-Type", "application/x-www-form-urlencoded") + + .addHeader("Authorization", "QBox " + access_token) + .addHeader("Host", "uc.qiniuapi.com") + .addHeader("X-Qiniu-Date", "20060102T150405Z").build(); + okhttp3.Response re = null; + re = client.newCall(request).execute(); + if (re.isSuccessful() == true) { + + System.out.println(re.code()); + System.out.println(re.toString()); + return re.code(); + } else { + System.out.println(re.code()); + System.out.println(re.toString()); + return re.code(); + + } + } + + + /** + * OSSClient + * 创建桶 + * + * @param bucketName + * @return + */ + public Integer createBucket(String bucketName, String region) throws IOException { + //mkbucketv2 此处不按照管网上的 管网上的会报401 + String path = "/mkbucketv2/" + encode(bucketName.getBytes()) + "/region/" + region + "\n"; + String access_token = auth.sign(path); + + + String url = "http://rs.qiniu.com/mkbucketv2/" + encode(bucketName.getBytes()) + "/region/" + region; + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder().url(url).addHeader("Content-Type", "application/x-www-form-urlencoded") + // Authorization 不以管网的 使用QBox +access_token 可以实现 + .addHeader("Authorization", "QBox " + access_token) + .addHeader("Host", "uc.qiniuapi.com") + .addHeader("X-Qiniu-Date", "20060102T150405Z").build(); + okhttp3.Response re = null; + try { + re = client.newCall(request).execute(); + if (re.isSuccessful() == true) { + + System.out.println(re.code()); + System.out.println(re.toString()); + return re.code(); + } else { + System.out.println(re.code()); + System.out.println(re.toString()); + return re.code(); + + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + @Override public OssInfo upLoad(InputStream is, String targetName, Boolean isOverride) { try { @@ -96,9 +248,10 @@ public class QiNiuOssClient implements StandardOssClient { return getInfo(targetName); } + //已废除 @Override public void downLoad(OutputStream os, String targetName) { - DownloadUrl downloadUrl = new DownloadUrl("qiniu.com", false, getKey(targetName, false)); + DownloadUrl downloadUrl = new DownloadUrl("", false, getKey(targetName, false)); try { String url = downloadUrl.buildURL(); HttpUtil.download(url, os, false); @@ -167,6 +320,8 @@ public class QiNiuOssClient implements StandardOssClient { } } + + @Override public void delete(String targetName) { try { diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssConfiguration.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssConfiguration.java index 35ea884..6ff7c26 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssConfiguration.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/QiNiuOssConfiguration.java @@ -2,6 +2,7 @@ package com.schisandra.oss.application.oss.core.qiniu; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.spring.SpringUtil; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; @@ -12,14 +13,15 @@ import com.schisandra.oss.application.oss.core.StandardOssClient; import com.schisandra.oss.application.oss.core.qiniu.model.QiNiuOssClientConfig; import com.schisandra.oss.application.oss.core.qiniu.model.QiNiuOssConfig; import com.schisandra.oss.application.oss.model.SliceConfig; +import com.schisandra.oss.common.entity.Result; import com.schisandra.oss.domain.bo.SchisandraOssQiniuBO; import com.schisandra.oss.domain.service.SchisandraOssQiniuDomainService; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Optional; +import java.util.concurrent.CompletableFuture; /** * @description: qiniu oss 配置类 @@ -32,25 +34,46 @@ import java.util.Optional; @Slf4j public class QiNiuOssConfiguration { + @Resource + QiNiuOssConfiguration qiniuOssConfiguration; @Resource private SchisandraOssQiniuDomainService schisandraOssQiniuDomainService; - public StandardOssClient qiNiuOssClient(String userId) { - SchisandraOssQiniuBO schisandraOssQiniuBO = schisandraOssQiniuDomainService.getQiniuOssConfig(userId); - SchisandraOssQiniuDTO schisandraOssQiniuDTO = SchisandraOssQiniuDTOConverter.INSTANCE.convertBOToDTO(schisandraOssQiniuBO); - if (ObjectUtil.isEmpty(schisandraOssQiniuDTO)) { - log.error("jd oss配置信息获取失败"); + public SchisandraOssQiniuDTO getSchisandraOssQiNDTO(String userId) { + CompletableFuture futurePrice = CompletableFuture.supplyAsync(() -> { + SchisandraOssQiniuBO qiniuBO = schisandraOssQiniuDomainService.getQiniuOssConfig(userId); + SchisandraOssQiniuDTO qiniuDTO = SchisandraOssQiniuDTOConverter.INSTANCE.convertBOToDTO(qiniuBO); + return qiniuDTO; + }); + SchisandraOssQiniuDTO qiniu = futurePrice.join(); + if (ObjectUtil.isEmpty(qiniu)) { + log.error("qiniu配置信息获取失败"); return null; } - String accessKey = schisandraOssQiniuDTO.getAccessKey(); - String secretKey = schisandraOssQiniuDTO.getSecretKey(); - QiNiuOssConfig qiNiuOssConfig = new QiNiuOssConfig(); - qiNiuOssConfig.setAccessKey(accessKey); - qiNiuOssConfig.setSecretKey(secretKey); - return qiNiuOssClient(qiNiuOssConfig); + return qiniu; + } + public Result qiNiuOssClient(String userId) { + try { + SchisandraOssQiniuDTO qiniu = qiniuOssConfiguration.getSchisandraOssQiNDTO(userId); + if (qiniu == null) return null; + QiNiuOssConfig qiniuOssConfig = new QiNiuOssConfig(); + qiniuOssConfig.setBasePath(qiniu.getBasePath()); + qiniuOssConfig.setBucketName(qiniu.getBucketName()); + qiniuOssConfig.setAccessKey(qiniu.getAccessKey()); + qiniuOssConfig.setSecretKey(qiniu.getSecretKey()); + qiniuOssConfig.setRegion(qiniu.getRegion()); + qiniuOssConfig.setEndpoint(qiniu.getEndpoint()); + qiniuOssConfig.init(); + + SpringUtil.registerBean(userId, qiNiuOssClient(qiniuOssConfig)); + return Result.ok(); + } catch (Exception e) { + log.error("QiniuOssConfiguration.qiniuOssClient:{}", e.getMessage(), e); + return Result.fail(); + } } private StandardOssClient qiNiuOssClient(QiNiuOssConfig qiNiuOssConfig) { diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/model/QiNiuOssConfig.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/model/QiNiuOssConfig.java index 3c163ba..cb58718 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/model/QiNiuOssConfig.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/qiniu/model/QiNiuOssConfig.java @@ -13,7 +13,8 @@ public class QiNiuOssConfig { private String secretKey; private String bucketName; private QiNiuOssClientConfig clientConfig; - + private String Region; + private String endpoint; /** * 断点续传参数 */ diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-domain/src/main/java/com/schisandra/oss/domain/bo/SchisandraOssQiniuBO.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-domain/src/main/java/com/schisandra/oss/domain/bo/SchisandraOssQiniuBO.java index 2602e77..1e71901 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-domain/src/main/java/com/schisandra/oss/domain/bo/SchisandraOssQiniuBO.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-domain/src/main/java/com/schisandra/oss/domain/bo/SchisandraOssQiniuBO.java @@ -168,5 +168,6 @@ public class SchisandraOssQiniuBO implements Serializable { */ private String checkBucket; + private String endpoint; } diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/resources/mapper/SchisandraOssQiniuDao.xml b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/resources/mapper/SchisandraOssQiniuDao.xml index d5c0962..6703f6a 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/resources/mapper/SchisandraOssQiniuDao.xml +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-infra/src/main/resources/mapper/SchisandraOssQiniuDao.xml @@ -34,6 +34,7 @@ +