若依前后端分离版 集成 腾讯云 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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记目录】

目录 001、流程 - - 入金申请 002、流程 - - 出金申请 003、流程 - - 用户注册 004、关系 - - 客服业绩统计报表 005、单词 - - 业务单词

亚信安慧AntDB:挑战的创新之道

在当今快速变化的商业环境中&#xff0c;企业需要能够快速适应业务需求的变化&#xff0c;并能够实现数据的实时更新和处理&#xff0c;以便及时获取最新信息和洞察。AntDB作为一种创新的数据库解决方案&#xff0c;正是能够满足这些需求的利器。 AntDB以其强大的功能和灵活的…

浏览器原理---浏览器本地存储

1、浏览器本地存储方式及使用场景 &#xff08;1&#xff09;Cookie Cookie是最早被提出来的本地存储方式&#xff0c;在此之前&#xff0c;服务端是无法判断网络中的两个请求是否是同一用户发起的&#xff0c;为解决这个问题&#xff0c;Cookie就出现了。Cookie的大小只有4kb&…

深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作

码到三十五 &#xff1a; 个人主页 OceanBase与MySQL模式下兼容性序 在当今的大数据时代&#xff0c;数据库技术的选择对于企业的信息化发展至关重要。OceanBase作为一种高性能、高可用的分布式关系数据库&#xff0c;在与MySQL模式的兼容性方面展现出了显著的优势&#xff0c…

【SpringBoot】数据脱敏

文章目录 什么是数据脱敏JsonSerialize自定义Jackson注解定制脱敏策略定制JSON序列化实现脱敏工具类 定义Person类&#xff0c;对其数据脱敏模拟接口测试总结 什么是数据脱敏 数据脱敏&#xff0c;也称为数据的去隐私化或数据变形&#xff0c;是一种技术手段&#xff0c;用于对…

vue各种时间类型转换

时间范围[2024-04-17 14:36:27, 2024-04-24 14:36:27] console.log(this.$getRecentDays()); 页面使用默认7天 也可以指定console.log(this.$getRecentDays(30)); [2024-04-17 14:36:27, 2024-04-24 14:36:27] 默认值 function getDateString (date, fmt yyyy-MM-dd) {if…

【问题实操】银河高级服务器操作系统实例分享,配置hugepages启动异常

1.问题现象 某运营商国产服务器操作系统项目&#xff0c;部署Kylin-Server-0524-aarch64服务器系统&#xff0c;内核从4.19.90-24.4升级到4.19.90-25.14。在grub中配置huagepages大页内存后&#xff0c;系统在内核启动阶段黑屏&#xff0c;只显示一个光标。grub配置如下图&…

Vue3框架

Vue3框架 一.使用create-vue搭建Vue3项目二.组合式API - setup选项1.setup选项的写法和执行时机2.setup中写代码的特点3. script setup 语法糖 三.组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 四.组合式API - computed五.组合式API - watch1. 侦听单个…

Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录 1. 安装辅助工具: gone2. 创建一个名为gen-code的新项目3. 创建Goner4. 使用辅助工具5. 添加main函数 我在两年前实现了一个Golang的依赖注入框架&#xff0c;并且集成了gin、xorm、redis、cron、消息中间件等功能&#xff0c;自己觉得还挺好用的&#xff1b;之前一直…

Linux Mint 21.3 “Virginia“ 简介

Linux Mint 21.3 "Virginia" 是Linux Mint项目发布的最新版本&#xff0c;这个版本基于Ubuntu 22.04 LTS&#xff08;Jammy Jellyfish&#xff09;&#xff0c;并提供了三个主要的桌面环境&#xff1a;Cinnamon、MATE和Xfce。每个桌面环境都有其独特的特点和优势&…

Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示

用户界面决定用户如何与屏幕交互。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。 第一步是在层次结构中创建一个 UI 元素。只需在层次结构中右键单击,滚动 UI 并选择要添加的 UI 元素类型。在本例中,我们将使用文本元素。…

编程新手如何快速提升编码能力?

编程新手想要快速提升编码能力&#xff0c;可以遵循以下几个策略&#xff1a; 基础扎实&#xff1a;首先&#xff0c;确保你对所学编程语言的基础概念有深刻理解&#xff0c;包括变量、数据类型、控制结构&#xff08;如循环、条件语句&#xff09;、函数、类和对象&#xff08…

使用 Docker 自建一款怀旧游戏之 - 扫雷

1&#xff09;扫雷 简介 扫雷 是一种经典的单人电脑游戏&#xff0c;最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块&#xff0c;而不触发地雷。每个方块上都标有数字&#xff0c;表示周围 8 个方块中…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址&#xff08;支持多个&#xff09;网址解析&#xff08;包括协议、主机、路径、参数等&#xff09; package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

行为学学习记忆实验和抗焦虑实验两款硬件

安徽耀坤XWX-BM八臂迷宫实验&#xff08;Eight-arm Maze Test&#xff0c;RMT&#xff09;由八个完全相同的臂组成&#xff0c;这些臂从一个中央平台放射出来&#xff0c;所以又被称为放射迷宫。其基本方式是&#xff1a;训练动物受食物的驱使对迷宫的各臂进行探究&#xff0c;…

xLua背包实践

准备工作 环境&#xff0c;代码 在C#代码方面我们需要准备单例模式基类&#xff0c;AB包管理器&#xff0c;lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包&#xff0c;具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码&#xff1a; JsonUtil…

SSH Config 后门 | Linux 后门系列

ssh 客户端配置文件加载顺序 命令行参数 > ~/.ssh/config > /etc/ssh/ssh_config Ubuntu server 16.04 默认 /etc/ssh/ssh_config # Host * # ForwardAgent no # ForwardX11 no # RhostsRSAAuthentication no # RSAAuthentication …

一、OSPF基础

目录 1.路由协议的优先级 2.转发原则&#xff1a;最长匹配原则 3.负载分担 4.路由备份&#xff08;浮动路由&#xff09; 5.路由协议的分类 6.动态路由 7.距离矢量路由协议&#xff08;BGP&#xff0c;RIP&#xff09; 8.链路状态路由协议&#xff08;OSPF&#xff0c;I…

联系Odoo partner邮件怎么写

亲爱的Odoo 伙伴 我是广东同欣的惊蛰&#xff0c;我通过Odoo官方的珠三角 Partner列表找到了你。 GuangDong TongXin Ai Technology Co., Ltd.&#xff0c;是一家面向中国提供Odoo服务的高科技公司。同欣总部位于广州&#xff0c;目前客户覆盖在广州&#xff0c;深圳&#…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中&#xff0c;如果后端需要启用https访问&#xff0c;通常项目启动后配置nginx代理再配置https&#xff0c;前端调用时高版本的chrome还会因为证书未信任导致调用失败&#xff0c;通过摸索整理一套开发调试下的https方案&#xff0c;特此分享 后端配置 …