腾讯云COS+SpringBOot实现文件上传下载功能

news2024/11/14 4:16:03

文章目录

      • 第一步:在.yml文件中配置对应秘钥内容
      • 第二步:完成COSConfig类编写
      • 第三步:编写Controller类
      • Bug提示:

最近一直在做一个项目,需要支持视频,音频,图片的上传,前面介绍的都是把腾讯云COS的配置文件放在一个Controller中,但是随着项目变大,需求增多,这里做一个拆分和封装

第一步:在.yml文件中配置对应秘钥内容

#密钥
cos:
  secretId: AKIDMeJ***********7PqDTef
  secretKey: 679**************7BBC3
  appId: 13******291
#存储桶
  bucketName: lh-1*****3291
#区域设置
  region: ap-beijing
#域名
  url: https://*************ing.myqcloud.com
#默认文件夹
  prefix: /files

第二步:完成COSConfig类编写

这里配置了客户端和配置文件类

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.region.Region;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Data
@Configuration
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Component
@ConfigurationProperties(prefix = "cos")
public class COSConfig {
    private String secretId;
    private String secretKey;
    private String appId;
    private String bucketName;
    private String region;
    private String url;
    private String prefix;

    @Bean
    public COSClient cosClient() {
//      初始化用户信息
        COSCredentials cosCredentials = new BasicCOSCredentials(this.secretId,this.secretKey);
//      设置地域
        Region region = new Region(this.region);
        ClientConfig config = new ClientConfig(region);
//      生成COS客户端
        COSClient client = new COSClient(cosCredentials,config);
        return client;
    }
}

第三步:编写Controller类

这里要进行cosConfig和cosClient的依赖注入,因为后面要用到,整体来说,就是把配置类和客户端进行了封装,后面再进行调用的时候更加便捷一些。减少了代码量,前面我发过其他的教程都是放在一个类的这样确实有点不好,这里做一次修改

import com.lantu.common.vo.Result;
import com.lantu.sys.entity.COSConfig;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.*;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.UUID;


@Api(tags = {"数据上传接口"})
@RestController
public class FileUploadController {

    @Resource
    private COSConfig cosConfig;
    @Resource
    private COSClient cosClient;

    //这里是图片和音频上传
    @PostMapping("/upload")
    public Result<String> handleFileUpload(@RequestParam("file") MultipartFile file){
        String key = file.getOriginalFilename();  //获取当前文件名
        UUID uuid=UUID.randomUUID();
        String str=uuid.toString().replace("-", "");;
        key="/image/"+str+key; //指定文件上传路径
        String url="";
        try {
            InputStream inputStream = new BufferedInputStream(file.getInputStream());
            //这一行代码是创建一个新的对象元数据(ObjectMetadata)实例,用于存储上传对象的元数据信息,例如对象的大小、内容类型、自定义元数据等。
            // 在上传对象时,可以将这个对象元数据与上传请求一起发送到对象存储服务。
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(file.getSize());
            PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), key, inputStream, objectMetadata);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); //将文件进行上传
            inputStream.close();
            url= cosConfig.getUrl()+key;
            System.out.println(url);
        } catch (Exception e) {
            System.out.println("文件上传警告!");
        }
        return Result.success(url);
    }
}

Bug提示:

这里我在完成的手遇到一个问题,在这里记录一下:

image-20230423100813193

在编写COSConfig类的时候如果出现这样的报错:

1.出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProperties这个注解时,所以问题出现在ConfigurationProperties注解。

完成下面几步就可以:

1.启动类添加

@EnableConfigurationProperties

2.pom.xml中添加

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

这两部完成基本就没什么问题了

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

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

相关文章

新一代边缘计算盒子,英码科技边缘计算盒子SY-E160

SY-E160 是英码科技推出的新一代智能工作站&#xff0c;内部集成了 4 核强悍处理器 A551.5 GHz&#xff0c;其内置的算力核拥有 16Tops 超强算力。SY-E160 工作站采用低功耗技术设计&#xff0c;支持 宽温度环境工作&#xff0c;可以灵活部署于各种 AI 场景中。 SY-E160 深元 A…

在SaleSmartly管理客户互动的 3 个好处

交互是关系的小组成部分。随着时间的推移&#xff0c;互动的质量决定了人们对这段关系的投入程度&#xff0c;同样的动态也适用于客户和品牌。在跨境电商业务中&#xff0c;每一次互动都是建立信任或失望的机会。 对于许多公司来说&#xff0c;客户互动的主要领域是客户服务功能…

机器学习 - Seaborn 练习, 常见功能查阅

机器学习记录 Seaborn Seaborn 是一个基于 Matplotlib 的 Python 可视化库,提供了一些内置数据集以及进行统计数据可视化和模型现场的 API。 sns.get_dataset_names() 方法会返回一个字符串列表,包含所有内置数据集的名称 练习 Seaborn 依赖Matplotlib, NumPy, SciPy, Pan…

python装不上库的心得

如果在相同的环境下别人能安装上&#xff0c;但你安装不上&#xff0c;可以考虑下面几点 目录 1 升级pip 2 有的包不用刻意装&#xff0c;它跟着别的就一起装了 3 缺少外部依赖 4 有的库用conda安装要方便一点 5 导入名不一定是包名 6 编译安装 7 安装包时&…

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例

西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例 具体方法可参考以下内容: 以下示例中TIA博途的版本为V17,本例中PLC做主站,机器人做从站 一、 西门子PLC一侧的组态设置和编程 首先,我们需要到下载所需的EtherNetIP通信库文件,大家可自行百度获取或者从以下链…

Kafka的核心概念

一、消息&#xff08;Record&#xff09; 消息是 Kafka 中最基本的数据单元。消息由一串字节构成&#xff0c;其中主要由 key 和 value 构成&#xff0c;key 和 value 也都是 byte 数组。消息的真正有效负载是 value 部分的数据。为了提高网络和存储的利用率&#xff0c;生产者…

TCP流量控制与拥塞控制

什么是流量控制 一条TCP连接的每一侧主机都为该连接设置了接收缓存。当该TCP连接接收到正确的、有序的报文段&#xff0c;就会将数据放入接收缓存。相关联的应用会从缓存中读取数据。 如果发送者发送数据过快、过多&#xff0c;而接收方的应用程序从缓冲区读取的速度较慢&…

【C++】二叉搜索树经典OJ题目

文章目录 根据二叉树创建字符串二叉树的层序遍历二叉树的层序遍历II二叉树的最近公共祖先二叉搜索树与双向链表从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树二叉树的前序遍历(非递归)二叉树的中序遍历(非递归)二叉树的后序遍历(非递归) 根据二叉树创建字符串…

捷报连连丨小匠物联SILA第六届“智光杯”荣获两项跨界大奖

2023年4月26日&#xff0c;SILA第六届“智光杯”跨界奖项名单公布。 喜讯传来&#xff0c;小匠物联荣获SILA第六届“智光杯”跨界奖项-全屋智能及商用系统优秀新供应链奖、智能照明新锐优秀新供应链奖。 “智光杯”“智光杯”由上海浦东智能照明联合会&#xff08;SILA&#xf…

【校招VIP】简历上项目名称看起来不重复,是安全相关项目,但是为什么简历通过率还是低?

在简历指导的直播里面&#xff0c;我看了一个新的项目。 这是个信息安全方向的一个项目&#xff0c;之前倒是没有看过。 所以项目的介绍本身是看不出它的重复度的。 但是一往下看 12345的要点&#xff0c;就发现这又是一个烂大街的。 项目本身的逻辑是没有写的。 然后又是所…

【Linux脚本篇】shell变量的使用

目录 &#x1f341;shell变量替换 &#x1f341;定义变量 &#x1f341;shell变量运算 &#x1f342;整数运算 &#x1f342;小数运算 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;Linux从入门到精通 shell变量替换 ${变量#匹配规则}…

设计模式 -- 访问者模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

SpringCloud入门实战(七)-Hystrix服务降级

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术&#xff0c;都可以先去官网先看看&…

三翼鸟:传统品牌只盯局部,智慧品牌谋划全局

“当今企业之间的竞争&#xff0c;不是产品之间的竞争&#xff0c;而是商业模式之间的竞争。”很多人都听过现代管理学之父德鲁克的这句话&#xff0c;但又有多少人真正理解了它&#xff1f; 以当下的语境去看&#xff0c;这里其实就是“自利”和“共荣”的区别。前者&#xf…

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题&#xff0c;算是最简单的“和环境交互中的学习”的一种形式&#xff0c;不存在状态信息&#xff0c;只有动作和奖励。多臂老虎机中的探索与利用&#xff08;exploration vs. exploitation&#xff09;问题一直以来都…

Zabbix“专家坐诊”第189期问答汇总

问题一 Q&#xff1a;您好&#xff0c;为什么在shell脚本中&#xff0c;不写mysql命令的绝对路径&#xff0c;zabbix获取不到输出的值&#xff1f; A&#xff1a;mysql默认命令是针对root等有权限才能直接使用的&#xff0c;其他用户要使用要指定命令路径。 Q&#xff1a;zab…

SLB负载均衡haproxy的安装及使用

1.介绍 HAProxy是什么 HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速&#xff08;最新稳定版1.7.2于2…

【剧前爆米花--爪哇岛寻宝】网络互连,网络通信和网络分层

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于网络初识的文章&#xff0c;在这篇文章中讲解了局域网广域网&#xff0c;IP地址&#xff0c;端口以及网络分层等相关内容&#xff0c;希望对你有所帮助&#xff01; 目录 网络互连…

无线通信网 - 无线局域网 WLAN(802.11 标准)

文章目录 1 概述2 WLAN2.1 802.11 标准2.2 网络分类2.3 通信技术 3 扩展3.1 移动通信3.2 网工软考真题 1 概述 #mermaid-svg-UcgosJsdJfSTEm0Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UcgosJsdJfSTEm0Y .err…

PMO和PM必备六大复盘方法工具汇总

无论是对于企业还是个人来说&#xff0c;复盘都是一个能让我们快速成长的方法&#xff0c;尤其是项目经理和PMO&#xff0c;你是带领项目团队的&#xff0c;每一次项目的完成&#xff0c;都有很多经验&#xff0c;俗话说&#xff0c;最大的浪费是经验的浪费&#xff01; 复盘的…