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

news/2024/9/24 4:25:09/

原因:

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

步骤:

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

            <!--        Tencent COS--><dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>${tencent.cos.version}</version></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

@Component
public class TencentCosConfig {/*** AccessKey*/private String secretId;/*** AccessKey秘钥*/private String secretKey;/*** bucket名称*/private String bucketName;/*** bucket下文件夹的路径*/private String region;/*** 访问域名*/private String url;public String getSecretId() {return secretId;}public void setSecretId(String secretId) {this.secretId = secretId;}public String getSecretKey() {return secretKey;}public void setSecretKey(String secretKey) {this.secretKey = secretKey;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}public String getRegion() {return region;}public void setRegion(String region) {this.region = region;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}
}
在utils文件夹中新建oss文件夹,并在其内构建Utils工具类

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

为参数赋值
    private static TencentCosConfig tenantCosConfig;/*** 使用构造方法注入配置信息*/@Autowiredpublic TencentOssUploadUtils(TencentCosConfig tenantCosConfig) {// 写死tenantCosConfig.setSecretId("A*****omY9i");tenantCosConfig.setSecretKey("*****w");tenantCosConfig.setBucketName("****6");tenantCosConfig.setRegion("ap-***");tenantCosConfig.setUrl("https://***.cos.ap-chongqing.myqcloud.com");TencentOssUploadUtils.tenantCosConfig = tenantCosConfig;}

 

 初始化COSClient
    /*** 初始化COSClient* @return*/private static COSClient initCos(){// 1 初始化用户身份信息(secretId, secretKey)BasicCOSCredentials credentials = new BasicCOSCredentials(tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());// 2 设置 bucket 的区域, COS 地域的简称请参照Region region = new Region(tenantCosConfig.getRegion());ClientConfig clientConfig = new ClientConfig(region);// 从 5.6.54 版本开始,默认使用了 https// clientConfig.setHttpProtocol(HttpProtocol.https);// 3 生成 cos 客户端。return new COSClient(credentials, clientConfig);}
创建  上传文件  方法
   /*** 上传文件* @param file* @return* @throws Exception*/public static String uploadFile(MultipartFile file) throws Exception {// 生成 OSSClient//OSS ossClient = new OSSClientBuilder().build(tenantCosConfig.getEndpoint(), tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());COSClient cosClient = initCos();// 原始文件名称// String originalFilename = file.getOriginalFilename();String filename = file.getOriginalFilename();InputStream inputStream = file.getInputStream();String filePath = getFilePath(filename);try {// 设置上传文件信息ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(file.getSize());PutObjectRequest putObjectRequest = new PutObjectRequest(tenantCosConfig.getBucketName(), filePath, inputStream, objectMetadata);// 上传文件cosClient.putObject(putObjectRequest);cosClient.setBucketAcl(tenantCosConfig.getBucketName(), CannedAccessControlList.PublicRead);return tenantCosConfig.getUrl() + "/" + filePath;} catch (Exception e) {e.printStackTrace();} finally {cosClient.shutdown();}return tenantCosConfig.getUrl() + "/" + filePath;}

 获取文件名方法

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

完整的方法

package com.ruoyi.common.utils.oss;import cn.hutool.core.util.RandomUtil;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.model.CannedAccessControlList;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
import com.ruoyi.common.config.TencentCosConfig;
import com.ruoyi.common.utils.file.FileUploadUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;/*** @author zouhuu* @description 阿里云对象存储上传工具类* @date 2022/06/16 14:21:12*/
@Slf4j
@Component
public class TencentOssUploadUtils {private static TencentCosConfig tenantCosConfig;/*** 使用构造方法注入配置信息*/@Autowiredpublic TencentOssUploadUtils(TencentCosConfig tenantCosConfig) {// 写死tenantCosConfig.setSecretId("A*****9i");tenantCosConfig.setSecretKey("J******CHCw");tenantCosConfig.setBucketName("****");tenantCosConfig.setRegion("ap-***");tenantCosConfig.setUrl("https://******ud.com");TencentOssUploadUtils.tenantCosConfig = tenantCosConfig;}/*** 上传文件* @param file* @return* @throws Exception*/public static String uploadFile(MultipartFile file) throws Exception {// 生成 OSSClient//OSS ossClient = new OSSClientBuilder().build(tenantCosConfig.getEndpoint(), tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());COSClient cosClient = initCos();// 原始文件名称// String originalFilename = file.getOriginalFilename();String filename = file.getOriginalFilename();InputStream inputStream = file.getInputStream();String filePath = getFilePath(filename);try {// 设置上传文件信息ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(file.getSize());PutObjectRequest putObjectRequest = new PutObjectRequest(tenantCosConfig.getBucketName(), filePath, inputStream, objectMetadata);// 上传文件cosClient.putObject(putObjectRequest);cosClient.setBucketAcl(tenantCosConfig.getBucketName(), CannedAccessControlList.PublicRead);return tenantCosConfig.getUrl() + "/" + filePath;} catch (Exception e) {e.printStackTrace();} finally {cosClient.shutdown();}return tenantCosConfig.getUrl() + "/" + filePath;}private static String getFilePath(String fileName){String filePath = "xinxun/";String fileType = fileName.substring(fileName.lastIndexOf("."));filePath += RandomUtil.randomString(8) + fileType;return filePath;}/*** 初始化COSClient* @return*/private static COSClient initCos(){// 1 初始化用户身份信息(secretId, secretKey)BasicCOSCredentials credentials = new BasicCOSCredentials(tenantCosConfig.getSecretId(), tenantCosConfig.getSecretKey());// 2 设置 bucket 的区域, COS 地域的简称请参照Region region = new Region(tenantCosConfig.getRegion());ClientConfig clientConfig = new ClientConfig(region);// 从 5.6.54 版本开始,默认使用了 https// clientConfig.setHttpProtocol(HttpProtocol.https);// 3 生成 cos 客户端。return new COSClient(credentials, clientConfig);}}
  • 修改图片上传方法

        文件位置:

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

        通用上传请求(单个)

    /*** 通用上传请求(单个)*/@PostMapping("/upload")public AjaxResult uploadFile(MultipartFile file) throws Exception {try{// 上传并返回新文件名称String url = TencentOssUploadUtils.uploadFile(file);AjaxResult ajax = AjaxResult.success();ajax.put("url", url);ajax.put("fileName", FileUtils.getName(url));ajax.put("originalFilename", file.getOriginalFilename());return ajax;}catch (Exception e){return AjaxResult.error(e.getMessage());}}

注意事项

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

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

Over


http://www.ppmy.cn/news/1444872.html

相关文章

DevOps(十四)怎么实现Gitlab更新后Jenkins自动发布

目录 1、在 Jenkins 中安装 GitLab 插件 2、在 GitLab 中创建一个访问令牌(Access Token) 3、在 Jenkins 中配置 GitLab 连接 4、在 Jenkins 中创建一个新的任务(Job) 5、在 GitLab 中配置 Webhook 6、以下是一些补充说明和建议 持续集成的一个特点就是开发可以随时提交&…

Vue的SetUp函数

在Vue 3中&#xff0c;引入了一个名为 setup 的新函数&#xff0c;它是使用组合式API时的一个主要功能。setup 函数是组件的入口点&#xff0c;它在组件创建之前执行&#xff0c;允许你定义组件的响应式状态、计算属性、侦听器和其他函数。这标志着Vue对于更具函数风格编程的支…

使用ULID而不是UUID

什么是ULID&#xff1f; ULID是一种通用唯一字典排序标识符&#xff0c;它比UUID的优势在于可排序性和性能。 ULID&#xff08;Universally Unique Lexicographically Sortable Identifier&#xff09;是一种新型的唯一标识符&#xff0c;由Alizain Feerasta在2016年提出。不…

环状串的字典序

【题目描述】 长度为n的环状串有n种表示法&#xff0c;分别为从某个位置开始顺时针得到。例如&#xff0c;图3-4的环状串有10种表示&#xff1a; CGAGTCAGCT&#xff0c;GAGTCAGCTC&#xff0c;AGTCAGCTCG等。在这些表示法中&#xff0c;字典序最小的称为"最小表示"…

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /assign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出现…

python学习笔记----函数(五)

一、函数介绍 在 Python 中&#xff0c;函数是一个组织好的、可重用的代码块&#xff0c;用来执行一个单一的、相关的动作。函数提供了代码的模块化和代码复用的能力。它可以接受输入参数&#xff0c;并可以返回一个结果。函数在 Python 编程中是基本的构建块之一。 二、函数…

云计算中的网络服务

网络服务是云计算平台不可或缺的一部分&#xff0c;为用户提供构建、管理、保护云环境中网络资源的能力。以下是对列举的七种网络服务——虚拟私有云&#xff08;VPC&#xff09;、负载均衡、内容分发网络&#xff08;CDN&#xff09;、云防火墙、专用网络连接&#xff08;专线…

图像处理软件Photoshop 2024下载及安装步骤

简介 Adobe Photoshop&#xff0c;简称Ps&#xff0c;是由Adobe公司开发和发行的图像处理软件。 Photoshop主要处理以像素所构成的数字图像&#xff0c;使用其众多的编修与绘图工具&#xff0c;可以有效地进行图片编辑和创造工作。PS 有很多功能&#xff0c;在图像、图形、文字…