腾讯云COS桶文件上传下载工具类

在这里插入图片描述

1,申请key和密钥

2,引入依赖

 <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.24</version></dependency>

3,工具类

package com.example.activity.utils;import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
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.model.GeneratePresignedUrlRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class TencentCOSUtils {/*** COS SECRETID*/private static String SECRETID = "ebOzOp8NafZL2ZxKX";/*** COS SECRETKEY*/private static String SECRETKEY = "WBhz59DF";/*** COS BUCKETNAME bucket的命名规则为{name}-{appid} ,存储桶名称必须为此格式*/private static String BUCKETNAME = "i959430";private static String filePathPrefix = "/jo";private static String region = "ou";public static void main(String[] args) throws FileNotFoundException {File file = new File("G:\\Download\\aa.jpg");Map<String, String> upload = upload(file);System.out.println(JSONUtil.toJsonStr(upload));}/**** 上传文件* @param file* @return*/public static Map<String, String> upload(File file) {COSClient cosClient = null;FileInputStream fileInputStream = null;Map<String, String> result = new HashMap<>();try {fileInputStream = new FileInputStream(file);//获取最后一个.的位置int lastIndexOf = file.getName().lastIndexOf(".");//获取文件的后缀名 .jpgString suffix = file.getName().substring(lastIndexOf);String filename = filePathPrefix + "/" + DateUtil.format(new Date(), "yyyyMMdd") + "/" + System.currentTimeMillis() + suffix;// 1 初始化用户身份信息(secretId, secretKey)。COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);// 2 设置bucket的区域, COS地域的简称请参照// https://cloud.tencent.com/document/product/436/6224// clientConfig中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者接口文档 FAQ中说明。ClientConfig clientConfig = new ClientConfig(new Region(region));// 3 生成 cos 客户端。cosClient = new COSClient(cred, clientConfig);// 指定要上传到的存储桶,指定要上传到 COS 上对象键ObjectMetadata objectMetadata = new ObjectMetadata();PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, filename, fileInputStream, objectMetadata);cosClient.putObject(putObjectRequest);result.put("fileName", filename);result.put("absolutePath", getAbsolutePath(filename));} catch (Exception e) {e.printStackTrace();} finally {if (cosClient != null) {// 关闭客户端(关闭后台线程)cosClient.shutdown();}if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}return result;}/*** 下载文件** @param fileName COS桶的文件路径* @param  outPath 输出路径*/public static void downFile(String fileName, String outPath) {COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);ClientConfig clientConfig = new ClientConfig(new Region(region));COSClient cosClient = new COSClient(cred, clientConfig);GetObjectRequest getObjectRequest = new GetObjectRequest(BUCKETNAME, fileName);ObjectMetadata object = cosClient.getObject(getObjectRequest, new File(outPath + "/" + fileName));System.out.println(object);}// 删除文件public static void delete(String filename) {COSClient cosClient = null;try {// 1 初始化用户身份信息(secretId, secretKey)。COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);// 2 设置bucket的区域, COS地域的简称请参照// https://cloud.tencent.com/document/product/436/6224// clientConfig中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者接口文档 FAQ// 中说明。ClientConfig clientConfig = new ClientConfig(new Region(region));// 3 生成 cos 客户端。cosClient = new COSClient(cred, clientConfig);cosClient.deleteObject(BUCKETNAME, filename);} finally {if (cosClient != null) {// 关闭客户端(关闭后台线程)cosClient.shutdown();}}}/**** 获取文件的绝对路径* @param fileName 文件名称* @return url*/public static String getAbsolutePath(String fileName) {// 1 初始化用户身份信息(secretId, secretKey)COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);// 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224// clientConfig中包含了设置region, https(默认http), 超时, 代理等set方法, 使用可参见源码或者接口文档FAQ中说明ClientConfig clientConfig = new ClientConfig(new Region(region));// 3 生成cos客户端COSClient cosclient = new COSClient(cred, clientConfig);// 设置URL过期时间为1小时 60*60*1000()Date expiration = new Date(System.currentTimeMillis() + 60 * 60 * 1000);GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(BUCKETNAME, fileName);// 设置签名过期时间(可选), 若未进行设置, 则默认使用 ClientConfig 中的签名过期时间(5分钟)generatePresignedUrlRequest.setExpiration(expiration);String url = cosclient.generatePresignedUrl(generatePresignedUrlRequest).toString();return url;}}

4,注意事项

1,SECRETID和SECRETKEY 需要有读写权限
2,获取的文件地址有时间限制,过期后需要重新获取

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

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

相关文章

在qml中,loader创建的组件,此时当loader的souceComponet变了其他组件,那么之前创建的组件还在吗?

在 QML 中&#xff0c;当 Loader 的 sourceComponent 属性变更为其他组件时&#xff0c;之前创建的组件会被销毁。这是因为 Loader 负责加载和卸载不同的组件。 以下是一个简单的例子&#xff0c;演示 Loader 的工作方式&#xff1a; import QtQuick 2.0Rectangle {width: 36…

怎么找微信服务器的IP地址

首先&#xff0c;让微信客户端在PC端运行&#xff0c;在任务管理器->详细信息中&#xff0c;找到WeChat.exe的进程&#xff0c;找到PID 就是微信进程的ID号&#xff0c;如下图所示&#xff1a; 打开一个命令行窗口&#xff0c;cmd或者powershell窗口都可以&#xff0c;输入…

筛选数据-第15届蓝桥第三次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第164讲。 第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕&#xff0c;编程题一共有6题&#xff0c;分别如下&…

transforms.Compose()函数作用解析

这是一个torchvision.transforms模块的函数&#xff0c;用于将一系列变换组合成一个新的变换序列。它接受一个变换列表&#xff0c;该列表包含一系列的图像处理操作&#xff0c;例如图像随机缩放、裁剪、旋转和翻转等。 在创建变换序列时&#xff0c;可以按照自己需要的顺序添…

大数据之谷歌文件系统论文 GFS The Google File System

原文地址 谷歌文件系统论文 摘要 我们设计并实现了Google文件系统&#xff0c;这是一个面向大规模分布式数据密集型应用的可扩展分布式文件系统。 它在廉价的通用硬件上运行&#xff0c;提供了容错性&#xff0c;并向大量客户端提供高聚合性能。 尽管与先前的分布式文件系统…

2023 我的编程之旅——路人贾‘ω‘

哈喽&#xff01;大家好&#xff0c;我是路人贾&#x1f601;~今天不读论文也不讲算法&#xff0c;来聊点有意思的&#xff01; 这是我第100篇博文&#xff0c;我翻了几遍草稿箱的库存&#xff0c;正纠结选哪篇时&#xff0c;一抬头看见了这个活动&#xff0c;眼前瞬间一亮——…

YOLOv8改进 | 融合改进篇 | CCFM + Dyhead完美融合突破极限涨点 (全网独家首发)

一、本文改进 本文给大家带来的改进机制是CCFM配合Dyhead检测头实现融合涨点,这个结构配合在一起只能说是完美的融合,看过我之前的检测头篇的读者都知道Dyhead官方版本支持的输入通道数是需要保持一致的,但是CCFM作为RT-DETR的Neck结构其输出通道数就是一致的,所以将这两种…

高防服务器、高防 IP 和高防 CDN 之间有什么区别?

网络运营人员最头痛的是什么&#xff1f; 网络攻击无疑名列前茅。一旦企业遭受网络攻击&#xff0c;所面临的损失可能是无法估量的。那么&#xff0c;如何有效地抵御网络攻击呢&#xff1f; 高防 IP、高防 CDN 和高防服务器是当前主流的防御手段。那何为“高防”呢&#xff1…

在qml中,ListModel可以与WorkerScript一起使用,从多个线程访问列表模型

在QML中&#xff0c;您可以使用ListModel和WorkerScript一起实现多线程访问列表模型。以下是一个简单的例子&#xff0c;演示了如何在QML中使用这两个元素&#xff1a; import QtQuick 2.15 import QtQuick.Controls 2.15ApplicationWindow {visible: truewidth: 400height: 3…

【深度学习每日小知识】Overfitting 过拟合

过拟合是机器学习&#xff08;ML&#xff09;中的常见问题&#xff0c;是指模型过于复杂&#xff0c;泛化能力较差的场景。当模型在有限数量的数据上进行训练&#xff0c;并且学习了特定于该特定数据集的模式&#xff0c;而不是适用于新的、看不见的数据的一般模式时&#xff0…

tkinter控件中文显示为unicode编码的解决办法

一、背景 最近使用python tkinter编写界面应用时&#xff0c;发现按钮的中文名称在windows上显示正常&#xff0c;但是在linux上显示为中文的unicode编码&#xff1b;文本输入框也是&#xff0c;输入中文输时&#xff0c;text控件上也显示为unicode编码&#xff0c;如下图所示…

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…

智能雾化壁炉设计,新时代科技与美学的完美结合

智能雾化壁炉设计&#xff0c;新时代科技与美学的完美结合 随着科技的不断创新&#xff0c;智能雾化壁炉设计成为家居设计领域的一颗耀眼明珠。它的出现不仅改变了传统壁炉的概念&#xff0c;更为我们带来了全新的视觉和感官体验。下面让我们一起探索智能雾化壁炉设计的优势和特…

jmeter和metersphere引用jar包报错Error invoking bsh method和 not found in namespace

2024-01-09 09:26:38 ERROR 54b7e26f 1-1 Error invoking bsh method: eval Sourced file: inline evaluation of: // BeanShell脚本开始 import com.example.demo.DemoApplication; DemoApplica . . . : Typed variable declaration : Class: DemoApplication not found in n…

activiti流程图+动态表单

使用技术 jeecg-bootactivitivue3form-create 简单效果展示 流程图绘制 审批人配置 动态表单配置 流程审批 流程审批记录 填写表单信息 源码地址 后台&#xff1a;https://gitee.com/houshixin/jmg-boot前端&#xff1a;https://gitee.com/houshixin/jmg-ui

从技术走向管理

管理是可以通过后天的学习掌握的一项技能&#xff0c;但同时管理这条路每个人走的都不一样&#xff0c;因为没有一个固定的标准而且前面的路有很多未知和不确定性&#xff0c;所以不同的人对管理的理解、定义以及怎么做管理都会有不同的想法、做法。 很多一线的技术人员通常都…

[M模拟] lc2182. 构造限制重复的字符串(贪心+模拟+复看)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;2182. 构造限制重复的字符串 力扣题解&#xff1a;[C] 贪心模拟&#xff0c;分类讨论&#xff0c;注释清晰 2. 题目解析 很明显贪心&#xff0c;有最大尽可能多的填最大&#xff0c;发现达到限制数后&#xff…

深入理解Lock Support

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们要聊聊Lock Support。Lock Support是Java并发编程的一块基石&#xff0c;它提供了一种非常底层的线程阻塞和唤醒机制&#xff0c;是许多高级同步工具的基础。 为什么要关注Lock Support&#xff1f;线程…

设计模式之多线程版本的if------Guarded Suspension模式

系列文章目录 设计模式之避免共享的设计模式Immutability&#xff08;不变性&#xff09;模式 设计模式之并发特定场景下的设计模式 Two-phase Termination&#xff08;两阶段终止&#xff09;模式 设计模式之避免共享的设计模式Copy-on-Write模式 设计模式之避免共享的设计模…

【Databend】行列转化:数据透视和逆透视

文章目录 数据准备数据透视数据逆透视总结 数据准备 学生学科得分等级测试数据如下&#xff1a; drop table if exists fact_suject_data; create table if not exists fact_suject_data (student_id int null comment 编号,subject_level varchar null comment …