当前位置:   article > 正文

若依前后端分离版 集成 腾讯云 COS

若依前后端分离版 集成 腾讯云 COS

原因:

        最近在根据一个若依二开的项目继续进行开发,当添加到轮播图模块的时候,涉及到了图片上传,由于公司以前一直使用的是腾讯云COS(不是阿里云OSS),在网上搜索一番后,没有找到 若依前后端分离版 COS 关键字的文章,只能根据阿里云OSS的文章进行模仿集成。

步骤:

  • 添加腾讯云依赖 

        在根pom.xml中(最外层的pom文件)添加依赖

  1. <!-- Tencent COS-->
  2. <dependency>
  3. <groupId>com.qcloud</groupId>
  4. <artifactId>cos_api</artifactId>
  5. <version>${tencent.cos.version}</version>
  6. </dependency>

        由于我使用的是 5.6.89 的版本,因此需要在  properties 标签中添加版本信息

        <tencent.cos.version>5.6.89</tencent.cos.version>
  • 设置COS的必要参数

        方式一:使用配置文件的方式设置COS参数(我没有使用这种方式,而是直接写死)

        方式二:直接在代码中配置COS参数(我是用的这个方式)

在公共模块中建立Bean

ruoyi-common->src->main->java->com->ruoyi->common->config->TencentCosConfig.java

  1. @Component
  2. public class TencentCosConfig {
  3. /**
  4. * AccessKey
  5. */
  6. private String secretId;
  7. /**
  8. * AccessKey秘钥
  9. */
  10. private String secretKey;
  11. /**
  12. * bucket名称
  13. */
  14. private String bucketName;
  15. /**
  16. * bucket下文件夹的路径
  17. */
  18. private String region;
  19. /**
  20. * 访问域名
  21. */
  22. private String url;
  23. public String getSecretId() {
  24. return secretId;
  25. }
  26. public void setSecretId(String secretId) {
  27. this.secretId = secretId;
  28. }
  29. public String getSecretKey() {
  30. return secretKey;
  31. }
  32. public void setSecretKey(String secretKey) {
  33. this.secretKey = secretKey;
  34. }
  35. public String getBucketName() {
  36. return bucketName;
  37. }
  38. public void setBucketName(String bucketName) {
  39. this.bucketName = bucketName;
  40. }
  41. public String getRegion() {
  42. return region;
  43. }
  44. public void setRegion(String region) {
  45. this.region = region;
  46. }
  47. public String getUrl() {
  48. return url;
  49. }
  50. public void setUrl(String url) {
  51. this.url = url;
  52. }
  53. }

在utils文件夹中新建oss文件夹,并在其内构建Utils工具类

ruoyi-common->src->main->java->com->ruoyi->common->utils->oss->TencentOssUploadUtils.java

为参数赋值

  1. private static TencentCosConfig tenantCosConfig;
  2. /**
  3. * 使用构造方法注入配置信息
  4. */
  5. @Autowired
  6. public TencentOssUploadUtils(TencentCosConfig tenantCosConfig) {
  7. // 写死
  8. tenantCosConfig.setSecretId("A*****omY9i");
  9. tenantCosConfig.setSecretKey("*****w");
  10. tenantCosConfig.setBucketName("****6");
  11. tenantCosConfig.setRegion("ap-***");
  12. tenantCosConfig.setUrl("https://***.cos.ap-chongqing.myqcloud.com");
  13. TencentOssUploadUtils.tenantCosConfig = tenantCosConfig;
  14. }

 

 初始化COSClient

  1. /**
  2. * 初始化COSClient
  3. * @return
  4. */
  5. private static COSClient initCos(){
  6. // 1 初始化用户身份信息(secretId, secretKey)
  7. BasicCOSCredentials credentials = new BasicCOSCredentials(tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());
  8. // 2 设置 bucket 的区域, COS 地域的简称请参照
  9. Region region = new Region(tenantCosConfig.getRegion());
  10. ClientConfig clientConfig = new ClientConfig(region);
  11. // 从 5.6.54 版本开始,默认使用了 https
  12. // clientConfig.setHttpProtocol(HttpProtocol.https);
  13. // 3 生成 cos 客户端。
  14. return new COSClient(credentials, clientConfig);
  15. }

创建  上传文件  方法

  1. /**
  2. * 上传文件
  3. * @param file
  4. * @return
  5. * @throws Exception
  6. */
  7. public static String uploadFile(MultipartFile file) throws Exception {
  8. // 生成 OSSClient
  9. //OSS ossClient = new OSSClientBuilder().build(tenantCosConfig.getEndpoint(), tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());
  10. COSClient cosClient = initCos();
  11. // 原始文件名称
  12. // String originalFilename = file.getOriginalFilename();
  13. String filename = file.getOriginalFilename();
  14. InputStream inputStream = file.getInputStream();
  15. String filePath = getFilePath(filename);
  16. try {
  17. // 设置上传文件信息
  18. ObjectMetadata objectMetadata = new ObjectMetadata();
  19. objectMetadata.setContentLength(file.getSize());
  20. PutObjectRequest putObjectRequest = new PutObjectRequest(tenantCosConfig.getBucketName(), filePath, inputStream, objectMetadata);
  21. // 上传文件
  22. cosClient.putObject(putObjectRequest);
  23. cosClient.setBucketAcl(tenantCosConfig.getBucketName(), CannedAccessControlList.PublicRead);
  24. return tenantCosConfig.getUrl() + "/" + filePath;
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. } finally {
  28. cosClient.shutdown();
  29. }
  30. return tenantCosConfig.getUrl() + "/" + filePath;
  31. }

 获取文件名方法

  1. private static String getFilePath(String fileName){
  2. String filePath = "xinxun/";
  3. String fileType = fileName.substring(fileName.lastIndexOf("."));
  4. filePath += RandomUtil.randomString(8) + fileType;
  5. return filePath;
  6. }

完整的方法

  1. package com.ruoyi.common.utils.oss;
  2. import cn.hutool.core.util.RandomUtil;
  3. import com.qcloud.cos.COSClient;
  4. import com.qcloud.cos.ClientConfig;
  5. import com.qcloud.cos.auth.BasicCOSCredentials;
  6. import com.qcloud.cos.model.CannedAccessControlList;
  7. import com.qcloud.cos.model.ObjectMetadata;
  8. import com.qcloud.cos.model.PutObjectRequest;
  9. import com.qcloud.cos.region.Region;
  10. import com.ruoyi.common.config.TencentCosConfig;
  11. import com.ruoyi.common.utils.file.FileUploadUtils;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Component;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import java.io.IOException;
  17. import java.io.InputStream;
  18. /**
  19. * @author zouhuu
  20. * @description 阿里云对象存储上传工具类
  21. * @date 2022/06/16 14:21:12
  22. */
  23. @Slf4j
  24. @Component
  25. public class TencentOssUploadUtils {
  26. private static TencentCosConfig tenantCosConfig;
  27. /**
  28. * 使用构造方法注入配置信息
  29. */
  30. @Autowired
  31. public TencentOssUploadUtils(TencentCosConfig tenantCosConfig) {
  32. // 写死
  33. tenantCosConfig.setSecretId("A*****9i");
  34. tenantCosConfig.setSecretKey("J******CHCw");
  35. tenantCosConfig.setBucketName("****");
  36. tenantCosConfig.setRegion("ap-***");
  37. tenantCosConfig.setUrl("https://******ud.com");
  38. TencentOssUploadUtils.tenantCosConfig = tenantCosConfig;
  39. }
  40. /**
  41. * 上传文件
  42. * @param file
  43. * @return
  44. * @throws Exception
  45. */
  46. public static String uploadFile(MultipartFile file) throws Exception {
  47. // 生成 OSSClient
  48. //OSS ossClient = new OSSClientBuilder().build(tenantCosConfig.getEndpoint(), tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());
  49. COSClient cosClient = initCos();
  50. // 原始文件名称
  51. // String originalFilename = file.getOriginalFilename();
  52. String filename = file.getOriginalFilename();
  53. InputStream inputStream = file.getInputStream();
  54. String filePath = getFilePath(filename);
  55. try {
  56. // 设置上传文件信息
  57. ObjectMetadata objectMetadata = new ObjectMetadata();
  58. objectMetadata.setContentLength(file.getSize());
  59. PutObjectRequest putObjectRequest = new PutObjectRequest(tenantCosConfig.getBucketName(), filePath, inputStream, objectMetadata);
  60. // 上传文件
  61. cosClient.putObject(putObjectRequest);
  62. cosClient.setBucketAcl(tenantCosConfig.getBucketName(), CannedAccessControlList.PublicRead);
  63. return tenantCosConfig.getUrl() + "/" + filePath;
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. } finally {
  67. cosClient.shutdown();
  68. }
  69. return tenantCosConfig.getUrl() + "/" + filePath;
  70. }
  71. private static String getFilePath(String fileName){
  72. String filePath = "xinxun/";
  73. String fileType = fileName.substring(fileName.lastIndexOf("."));
  74. filePath += RandomUtil.randomString(8) + fileType;
  75. return filePath;
  76. }
  77. /**
  78. * 初始化COSClient
  79. * @return
  80. */
  81. private static COSClient initCos(){
  82. // 1 初始化用户身份信息(secretId, secretKey)
  83. BasicCOSCredentials credentials = new BasicCOSCredentials(tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());
  84. // 2 设置 bucket 的区域, COS 地域的简称请参照
  85. Region region = new Region(tenantCosConfig.getRegion());
  86. ClientConfig clientConfig = new ClientConfig(region);
  87. // 从 5.6.54 版本开始,默认使用了 https
  88. // clientConfig.setHttpProtocol(HttpProtocol.https);
  89. // 3 生成 cos 客户端。
  90. return new COSClient(credentials, clientConfig);
  91. }
  92. }

        文件位置:

ruoyi-admin->src->main->java->com->ruoyi->web->controller->common->CommonController.java 

        通用上传请求(单个)

  1. /**
  2. * 通用上传请求(单个)
  3. */
  4. @PostMapping("/upload")
  5. public AjaxResult uploadFile(MultipartFile file) throws Exception {
  6. try
  7. {
  8. // 上传并返回新文件名称
  9. String url = TencentOssUploadUtils.uploadFile(file);
  10. AjaxResult ajax = AjaxResult.success();
  11. ajax.put("url", url);
  12. ajax.put("fileName", FileUtils.getName(url));
  13. ajax.put("originalFilename", file.getOriginalFilename());
  14. return ajax;
  15. }
  16. catch (Exception e)
  17. {
  18. return AjaxResult.error(e.getMessage());
  19. }
  20. }

注意事项

当修改完若依后端之后,还需要修改前端的imageUpload

  1. // data里面 将baseUrl 的默认值改为"",不然就会在图片url中出现devapi
  2.  baseUrl: "",

Over

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/548025
推荐阅读
相关标签
  

闽ICP备14008679号