腾讯云OSS文件上传功能

腾讯云COS介绍

腾讯云COS(Cloud Object Storage)是一种基于对象的存储服务,用于存储和管理海量的非结构化数据,如图片、音视频文件、备份数据等。它具有以下特点和优势:

  1. 高可靠性:采用分布式存储架构,数据会在多个设备上进行冗余备份,确保数据的高可靠性和持久性。
  2. 弹性扩展:支持根据业务需求自动扩展存储容量,无需担心存储空间不足的问题。
  3. 低成本:提供按需计费方式,用户只需支付实际使用的存储容量和数据传输流量,无需预付费。
  4. 安全性:支持数据加密传输和存储,保障数据的安全性和隐私性。
  5. 简单易用:提供简单的API接口和丰富的SDK,方便开发者快速集成和使用。

此外,腾讯云COS还广泛应用于以下场景:

  1. 静态网站托管:将网站的静态资源(如HTML、CSS、JavaScript、图片等)存储在COS中,实现高可用、高性能的静态网站托管。
  2. 大规模数据备份和归档:提供高可靠性和低成本的存储服务,适用于大规模数据备份和长期归档存储。
  3. 音视频存储和处理:支持存储和管理大规模的音视频文件,并提供音视频处理服务,如转码、截图、水印等。
  4. 移动应用数据存储:提供简单易用的API和SDK,方便移动应用将用户数据、图片、文件等存储在云端。
  5. 云原生应用存储:可以作为云原生应用的对象存储服务,存储应用程序的配置文件、日志文件、静态资源等。

总的来说,腾讯云COS是一种高可靠、低成本、弹性扩展的云存储服务,适用于各种需要存储和管理海量非结构化数据的场景。

一、前言

后台管理系统需要有图片等文字上传功能,如图。

通过腾讯的OSS组件进行文件的上传。

二、实现步骤

1、pom文件引入腾讯云cos  maven依赖

		<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>${cos_api.version}</version></dependency>

版本可使用:  <cos_api.version>5.6.89</cos_api.version>

2、编写配置类。获取cos的相关配置,

相关配置包括域名、地域节点,存储桶 ,秘钥等购买腾讯云时分配的信息。与及要上传的文件相关信息要求。

@Data
@Component
@ConfigurationProperties(prefix = "oss.tencent")
public class TencentProperties {/**域名*/private String domain;/**地域节点*/private String region;/**存储桶名称*/private String bucketName;/**secretId*/private String secretId;/**secretKey*/private String secretKey;/**图片策略*/private String styleRule;/**缩略图策略*/private String thumbnailStyleRule;/**文件类型*/private List<String> fileTypes;
}

3、文件上传下载处理类编写

@Slf4j
@Component("tencent")
public class TencentFileHandle implements FileStrategy {@AutowiredTencentProperties tencentProperties;// 创建 COSClient 实例,这个实例用来后续调用请求COSClient createCOSClient() {// 设置用户身份信息。// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理String secretId = tencentProperties.getSecretId();String secretKey = tencentProperties.getSecretKey();COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// ClientConfig 中包含了后续请求 COS 的客户端设置:ClientConfig clientConfig = new ClientConfig();// 设置 bucket 的地域// COS_REGION 请参照 https://cloud.tencent.com/document/product/436/6224clientConfig.setRegion(new Region(tencentProperties.getRegion()));// 设置请求协议, http 或者 https// 5.6.53 及更低的版本,建议设置使用 https 协议// 5.6.54 及更高版本,默认使用了 httpsclientConfig.setHttpProtocol(HttpProtocol.https);// 以下的设置,是可选的:// 设置 socket 读取超时,默认 30sclientConfig.setSocketTimeout(30*1000);// 设置建立连接超时,默认 30sclientConfig.setConnectionTimeout(30*1000);// 如果需要的话,设置 http 代理,ip 以及 port
//        clientConfig.setHttpProxyIp("httpProxyIp");
//        clientConfig.setHttpProxyPort(80);// 生成 cos 客户端。return new COSClient(cred, clientConfig);}// 创建 TransferManager 实例,这个实例用来后续调用高级接口TransferManager createTransferManager() {// 创建一个 COSClient 实例,这是访问 COS 服务的基础实例。// 详细代码参见本页: 简单操作 -> 创建 COSClientCOSClient cosClient = createCOSClient();// 自定义线程池大小,建议在客户端与 COS 网络充足(例如使用腾讯云的 CVM,同地域上传 COS)的情况下,设置成16或32即可,可较充分的利用网络资源// 对于使用公网传输且网络带宽质量不高的情况,建议减小该值,避免因网速过慢,造成请求超时。ExecutorService threadPool = Executors.newFixedThreadPool(32);// 传入一个 threadpool, 若不传入线程池,默认 TransferManager 中会生成一个单线程的线程池。TransferManager transferManager = new TransferManager(cosClient, threadPool);// 设置高级接口的配置项// 分块上传阈值和分块大小分别为 5MB 和 1MBTransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration();transferManagerConfiguration.setMultipartUploadThreshold(5*1024*1024);transferManagerConfiguration.setMinimumUploadPartSize(1*1024*1024);transferManager.setConfiguration(transferManagerConfiguration);return transferManager;}void shutdownTransferManager(TransferManager transferManager) {// 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。// 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。transferManager.shutdownNow(true);}@Overridepublic UploadDto upload(MultipartFile file) throws Exception {return upload(file, null);}@Overridepublic UploadDto upload(MultipartFile file, String filePath) throws Exception {//文件名String fileFullName = FileUtil.getName(file.getOriginalFilename());InputStream inputStream = file.getInputStream();return upload(inputStream, fileFullName, filePath);}public UploadDto upload(InputStream inputStream, String fileFullName, String filePath) throws Exception {if (inputStream == null) {throw new Exception("上传文件不能为空");}TransferManager transferManager = createTransferManager();String bucketName = tencentProperties.getBucketName();//int inputStreamLength = 1024 * 1024;
//        byte data[] = new byte[inputStreamLength];
//        InputStream inputStream = new ByteArrayInputStream(data);ObjectMetadata objectMetadata = new ObjectMetadata();// 上传的流如果能够获取准确的流长度,则推荐一定填写 content-length// 如果确实没办法获取到,则下面这行可以省略,但同时高级接口也没办法使用分块上传了//objectMetadata.setContentLength(inputStreamLength);try {//时间戳String timestamp = String.valueOf(System.currentTimeMillis());//文件扩展名String extension = FileUtil.getSuffix(fileFullName);String fileName = FileUtil.getPrefix(fileFullName);List<String> fileTypes = tencentProperties.getFileTypes();if(fileTypes != null) {boolean flag= fileTypes.contains(extension);Assert.isTrue(flag, "不支持上传的文件类型:" + extension);}String upFilePath = StringUtils.join(fileName, "_", timestamp, ".", extension);if(filePath != null) {upFilePath = StringUtils.join(filePath, "/", upFilePath);}String key = upFilePath;PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream, objectMetadata);// 高级接口会返回一个异步结果Upload// 可同步地调用 waitForUploadResult 方法等待上传完成,成功返回UploadResult, 失败抛出异常Upload upload = transferManager.upload(putObjectRequest);UploadResult uploadResult = upload.waitForUploadResult();if (uploadResult == null) {log.error("上传附件到腾讯云失败 fileName={}", upFilePath);throw new Exception("上传附件 " + upFilePath + " 到腾讯云失败 ");}log.info("cos fileName:" + upFilePath);//返回上传结果UploadDto uploadDto = new UploadDto();uploadDto.setName(upFilePath);
//            uploadDto.setKey(upFilePath);uploadDto.setCreateTime(DateUtil.date());return uploadDto;} catch (Exception e) {log.error("cos 上传失败", e);throw new RuntimeException("文件="+fileFullName + " 上传失败");} finally {shutdownTransferManager(transferManager);}}@Overridepublic byte[] download(String key) throws Exception {return null;}@Overridepublic void delete(String key) {}}

4、图片相关信息类

@Data
public class UploadDto implements Serializable {/*** */private static final long serialVersionUID = 1L;/**图片名*/private String name;/**图片路径*/private String imgUrl;
//    /**key*/
//    private String key;
//    /**图片跳转路径*/
//    private String targetUrl;/**上传日期*/@JsonFormat(pattern = "yyyy-MM-dd")private Date createTime;
}

5、调用

/*** 图片上传* 图片上传至OSS** @param file 文件流* @return ResponseData<UploadDto>* @throws Exception*/@ApiOperation(value = "图片上传至OSS", notes = "图片上传至OSS")@PostMapping("upload")public ResponseData<UploadDto> upload(@RequestPart("file") MultipartFile file, @RequestHeader(name="ossType") String ossType) throws Exception {
//        Assert.notNull(ossType, "资源类型不能为空");if (file.getSize()/1024 > 10*1024) {return ResponseData.error("资源为:" + (file.getSize()/1024/1024) + "M,大小超出限制的10M");}OssTypeEnum ossTypeEnum = null;try {if(ossType != null)ossTypeEnum = OssTypeEnum.valueOf(ossType);} catch (RuntimeException e) {return ResponseData.error("资源类型不存在:" + ossType);}//上传至OSSUploadDto dto = uploadService.upload(file, ossTypeEnum);if (ObjectUtil.isNotEmpty(dto)) {return ResponseData.success(dto);} else {log.error(MShuffleConstant.UPLOAD_FAILED);return ResponseData.error(MShuffleConstant.UPLOAD_FAILED);}}

相关配置说明:

腾讯云COS(Cloud Object Storage)的配置主要涉及到创建存储桶、设置访问权限、配置数据传输等方面。以下是一个基本的腾讯云COS配置说明:

  1. 创建存储桶:首先,你需要在腾讯云COS控制台中创建一个或多个存储桶,用于存储你的数据。存储桶是COS中用于存储对象的容器,你可以根据业务需求创建不同的存储桶来组织和管理你的数据。
  2. 设置访问权限:为了保护你的数据安全,你需要为存储桶设置适当的访问权限。COS提供了多种访问权限控制方式,包括基于身份的访问控制(IAM)、存储桶策略、预签名URL等。你可以根据实际需求选择适合的权限控制方式,确保只有授权的用户或应用程序能够访问你的数据。
  3. 配置数据传输:如果你的数据需要从其他地方传输到COS,你可以配置数据传输任务。COS支持多种数据传输方式,包括使用COS的迁移工具、通过API接口上传数据、使用SDK进行数据传输等。你可以根据你的数据来源和目标选择适合的数据传输方式。
  4. 启用数据处理功能:COS还提供了一些数据处理功能,如图片处理、音视频处理等。如果你需要对这些类型的数据进行处理,可以在COS控制台中启用相应的处理功能,并配置相应的处理规则。

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

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

相关文章

MySQL学习记录——십이 事务

文章目录 1、了解事务2、事务提交3、事务隔离级别1、隔离性和隔离级别2、查看、设置隔离级别3、读未提交4、读提交5、可重复读6、串行化7、总结 4、事务一致性5、事务隔离性1、隐藏字段2、undo日志3、模拟MVCC4、Read View 6、读提交RC、可重复读RR的区别 1、了解事务 MySQL内…

关于游戏开发的那些工具

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01;下面我就和大家一起来了解一下有关游戏开发需要哪些工具呢。 游戏开发是一个涉及多个领域和环节的复杂过程&#xff0c;需要使用各种工具来辅助开发人员完成各项任务。下面将介绍一些常用的游戏开发工具&…

强化学习(TD3)

TD3——Twin Delayed Deep Deterministic policy gradient 双延迟深度确定性策略梯度 TD3是DDPG的一个优化版本&#xff0c;旨在解决DDPG算法的高估问题 优化点&#xff1a; ①双重收集&#xff1a;采取两套critic收集&#xff0c;计算两者中较小的值&#xff0c;从而克制收…

第一个 Angular 项目 - 动态页面

第一个 Angular 项目 - 动态页面 使用的所有技巧都在下面的笔记里&#xff1a; [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组件交流的内容 以下涉及到组件内的沟通&#xff0c;从这开始数据就“活”…

Leetcode 3040. Maximum Number of Operations With the Same Score II

Leetcode 3040. Maximum Number of Operations With the Same Score II 1. 解题思路2. 代码实现 题目链接&#xff1a;3040. Maximum Number of Operations With the Same Score II 1. 解题思路 这一题的话思路就是一个动态规划&#xff0c;显然对于每一种情况都有3种可能的…

才气系统与逻辑系统道装实现的比较

才气系统与逻辑系统道装实现的比较 道装道装思想简介烛火流形学习引擎&#xff0c;流形学习的引入王船山信息熵&#xff0c;简称王船山熵&#xff1b;凝聚态数学可计算函数科学方法道装由来琴语言简介逻辑与才气的逐层比较表格&#xff08;王船山熵&#xff09; 道装 道装思想…

OpenCV 入门讲解

OpenCV 入门讲解 OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 是一个开源的计算机视觉库&#xff0c;它提供了许多高效实现计算机视觉算法的函数&#xff0c;从基本的滤波到高级的物体检测都有涵盖。OpenCV 使用 C/C 开发&#xff0c;同时也提供了 Pyt…

短链接系统测试报告

目录 项目背景 项目功能 自动化测试 总结 项目背景 随着互联网的发展&#xff0c;链接&#xff08;URL&#xff09;变得越来越长且复杂&#xff0c;这不仅影响用户体验&#xff0c;还可能由于字符限制导致在某些平台或应用中无法完整显示。为了解决这一问题&#xff0c;我…

Ubuntu22.04LTS编译Frida历史版本,环境配制及细节调整

经常使用Frida的朋友们可能会遇到Frida的各种问题需要自定义的&#xff0c;而这时候Frida的本地编译就显得很重要了。 最近一位朋友发现使用Frida14/15/16版的server只能连拉一定数量的设备&#xff0c;超过了frida-device-manager便不能连接设备。 实现没有办法&#xff0c;…

综合练习

目录 查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置 确定要使用的数据表 确定已知的关联字段 查询每个员工的编号、姓名、职位、基本工资、工资等级 确定要使用的数据表 确定已知的关联字段 查询每个员工的编号、姓名、职位、基本工资、部门名称、工资…

⭐北邮复试刷题589. N 叉树的前序遍历__DFS (力扣每日一题)

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,null,…

数据结构与算法:二叉树

一、二叉树的链式存储 树结点数据结构 typedef char BiElemType; typedef struct BiTNode{BiElemType c;struct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;树中任何一个结点都是一个结构体&#xff0c;它的空间是通过malloc申请出来的 二、二叉树层次建树 …

<网络安全>《38 网络攻防专业课<第四课 - windows常见漏洞>》

1 系统漏洞概述 系统漏洞概述&#xff1a; 漏洞是指应用软件或操作系统软件在逻辑设计上的缺陷&#xff0c;或在编写时产生的错误。 漏洞是硬件、软件、协议的具体实现或系统安全策略上存在的缺陷&#xff0c;从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2 Window…

JS面向对象:六.原型链

原型链是 JavaScript 中实现对象之间继承关系的一种机制。在 JavaScript 中&#xff0c;每个对象都有一个指向另一个对象的链接&#xff0c;这个链接被称为原型。当试图访问一个对象的属性或方法时&#xff0c;如果该对象本身没有这个属性或方法&#xff0c;JavaScript 就会沿着…

数据安全之认识数据资产管理平台

文章目录 一、什么是数据资产二、什么是数据资产管理平台1、什么是数据资产管理平台2、为什么需要数据资产管理平台 三、数据资产管理平台的主要功能四、数据资产管理平台的工作原理五、数据资产管理平台的应用场景六、安全资产管理平台与数据资产管理平台的区别与关系1、安全资…

华为配置旁挂二层组网直接转发示例

配置旁挂二层组网直接转发示例 组网图形 图1 配置旁挂二层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法,亲测有效!!!

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在处理图像和视频等计算机视觉任务时&#xff0c;OpenCV是一个非常强大的库。然而…

数据库:存储、管理和分析数据的基石——数据库的介绍,分类,作用和特点

引言&#xff1a; 在现代信息时代&#xff0c;数据的管理和存储成为各个领域中不可或缺的一部分。数据库技术应运而生&#xff0c;它提供了一种结构化方式来组织、存储和管理数据。本文将详细介绍数据库的概念&#xff0c;并对常见的数据库进行分类&#xff0c;探讨它们的作用、…

图像处理之《隐写网络的隐写术》论文阅读

一、文章摘要 隐写术是一种在双方之间进行秘密通信的技术。随着深度神经网络(DNN)的快速发展&#xff0c;近年来越来越多的隐写网络被提出&#xff0c;并显示出良好的性能。与传统的手工隐写工具不同&#xff0c;隐写网络的规模相对较大。如何在公共信道上秘密传输隐写网络引起…

Linux colrm命令教程:如何移除文本文件中的指定列(附实例详解和注意事项)

Linux colrm命令介绍 colrm&#xff08;column remove&#xff09;命令在Linux中用于编辑源代码文件、脚本文件或常规文本文件中的文本。此命令可以从文件中移除选定的列。在这里&#xff0c;列被定义为一行中的单个字符。它始终从索引1开始&#xff0c;而不是0。 Linux colr…