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

2024-05-01 04:28
文章标签 分离 集成 腾讯 cos 若依

本文主要是介绍若依前后端分离版 集成 腾讯云 COS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原因:

        最近在根据一个若依二开的项目继续进行开发,当添加到轮播图模块的时候,涉及到了图片上传,由于公司以前一直使用的是腾讯云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

 

这篇关于若依前后端分离版 集成 腾讯云 COS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950717

相关文章

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o