使用

package com.ruoyi;
import java.io.File;
public class mytest {
private static String secretId = "AKID2oPDo111111111111dMp53mHfoYZGw";
private static String secretKey = "e6JTP5e222222222222GvhHYBl7C5g05";
private static String bucketName = "mht-12566666666";
private static String regionStr = "ap-beijing";
private static String domain = "https://mht-12566666666.cos.ap-beijing.myqcloud.com"; public static void main(String[] args) {
CosUtil cosUtil = new CosUtil(secretId, secretKey, bucketName, regionStr, 30L * 60L, domain);
File file = new File("C:\\Users\\13301\\Desktop\\微信截图_20220926222441.png");
Boolean put = cosUtil.put("20220926222441.png", file);
System.out.println(put ? "上传成功" : "上传失败");
//获取带签名的有有效期的图片链接,如果存储桶的权限为私有读,那么必须使用这个链接才能直接访问图片
//如果设置了公有读,那么直接拼接即可访问
String sourceUrl = cosUtil.getSourceUrl("20220926222441.png");
System.out.println(sourceUrl);
}
}

结果

上传成功

https://mht-12566666666.cos.ap-beijing.myqcloud.com/20220926222441.png?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKID2oPDoCYwmM0sb9nREwPdMp53mHfoYZGw%26q-sign-time%3D1664205380%3B1664207180%26q-key-time%3D1664205380%3B1664207180%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D260170f52383e7e8ff2af5ece1edd03809ea0cc6

引入依赖

        <!-- 腾讯云对象存储 SDK -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.105</version>
</dependency>

工具类

package com.ruoyi.project.cos.utils;

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.http.HttpMethodName;
import com.qcloud.cos.model.GeneratePresignedUrlRequest;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region; import java.io.File;
import java.io.InputStream;
import java.util.Date; /**
* 腾讯云对象存储工具类
*
* @author DaenMax
*/
public class CosUtil {
private static String secretId;
private static String secretKey;
private static String bucketName;
private static String regionStr;
private static COSClient client;
private static Long expireTime;
private static String domain; /**
* @param secretId
* @param secretKey
* @param bucketName 存储桶名
* @param regionStr 所属地域,例如 ap-beijing
* @param expireTime 带有sign的图片链接的有效期,单位秒数
* @param domain 访问域名,例如 https://mht-1266634666.cos.ap-beijing.myqcloud.com
*/
public CosUtil(String secretId, String secretKey, String bucketName, String regionStr, Long expireTime, String domain) {
CosUtil.secretId = secretId;
CosUtil.secretKey = secretKey;
CosUtil.bucketName = bucketName;
CosUtil.regionStr = regionStr;
CosUtil.expireTime = expireTime;
CosUtil.domain = domain;
COSCredentials cred = new BasicCOSCredentials(CosUtil.secretId, CosUtil.secretKey);
Region region = new Region(CosUtil.regionStr);
ClientConfig clientConfig = new ClientConfig(region);
client = new COSClient(cred, clientConfig);
} /**
* 上传文件到服务器 如果key重复将被覆盖
*
* @param key 文件名,支持文件夹路径,例如:“QQ截图.png” 、 "/an111c/QQ截图.png",如果文件夹不存在腾讯云会自动创建
* @param file
* @return
*/
public Boolean put(String key, File file) {
try {
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
client.putObject(putObjectRequest);
} catch (Exception e) {
return false;
}
return true;
} /**
* 上传文件到服务器 如果key重复将被覆盖
*
* @param key 文件名,支持文件夹路径,例如:“QQ截图.png” 、 "/an111c/QQ截图.png",如果文件夹不存在腾讯云会自动创建
* @param inputStream 直接 multipartFile.getInputStream()
* @return
*/
public Boolean put(String key, InputStream inputStream) {
try {
client.putObject(CosUtil.bucketName, key, inputStream, null);
} catch (Exception e) {
return false;
}
return true;
} /**
* 判断对象是否已经存在
*
* @param key 文件名,支持文件夹路径,例如:“QQ截图.png” 、 "/an111c/QQ截图.png"
*/
public Boolean isExist(String key) {
return client.doesObjectExist(CosUtil.bucketName, key);
} /**
* 获取带权限的下载链接
*
* @param key 文件名,支持文件夹路径,例如:“QQ截图.png” 、 "/an111c/QQ截图.png"
*/
public String getSourceUrl(String key) {
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET);
// 设置签名过期时间(可选), 若未进行设置, 则默认使用 ClientConfig 中的签名过期时间(1小时)
Date expirationDate = new Date(System.currentTimeMillis() + expireTime * 1000L);
req.setExpiration(expirationDate);
return client.generatePresignedUrl(req).toString();
} /**
* 上传文件MultipartFile转为File
*
* @param multipartFile
* @return
* @throws Exception
*/
public static File transferToFile(MultipartFile multipartFile) throws Exception {
//获取文件名,例如:QQ截图.png
String originalFilename = multipartFile.getOriginalFilename();
//获取文件后缀,例如:.png
String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
File file = File.createTempFile(originalFilename, prefix);
multipartFile.transferTo(file);
//在程序退出时,才会执行删除
file.deleteOnExit();
return file;
} /**
* 获取上传文件的后缀,例如 .png
*
* @param multipartFile
* @return
* @throws Exception
*/
public static String getPrefix(MultipartFile multipartFile) {
//获取文件名,例如:QQ截图.png
String originalFilename = multipartFile.getOriginalFilename();
//获取文件后缀,例如:.png
String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
return prefix;
} /**
* 获取上传文件的md5
* 32位小写
*
* @param multipartFile
* @return
* @throws Exception
*/
public static String getMd5(MultipartFile multipartFile) throws Exception {
//获取文件的byte信息
byte[] uploadBytes = multipartFile.getBytes();
//拿到一个MD5转换器
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(uploadBytes);
//转换为16进制
return new BigInteger(1, digest).toString(16);
} /**
* 获取文件大小
*
* @param file
* @param type 单位,1=KB,2=MB
* @return
*/
public static BigDecimal getFileSize(File file, int type) {
long size = file.length();
BigDecimal sizeDecimal = new BigDecimal(size);
BigDecimal kbDecimal = new BigDecimal(type == 1 ? "1024" : "1048576");
BigDecimal sizeKB = sizeDecimal.divide(kbDecimal, 2, BigDecimal.ROUND_HALF_UP);
return sizeKB;
} /**
* 获取文件大小
*
* @param file
* @param type 单位,1=KB,2=MB
* @return
*/
public static BigDecimal getFileSize(MultipartFile file, int type) {
long size = file.getSize();
BigDecimal sizeDecimal = new BigDecimal(size);
BigDecimal kbDecimal = new BigDecimal(type == 1 ? "1024" : "1048576");
BigDecimal sizeKB = sizeDecimal.divide(kbDecimal, 2, BigDecimal.ROUND_HALF_UP);
return sizeKB;
}
}

腾讯云对象存储工具类和demo的更多相关文章

  1. Laravel项目使用腾讯云对象存储上传图片(cos-php-sdk-v5版本)

    为了加快网站访问速度.降低网站负载,现在越来越多的网站选择把图片等静态文件放在云上,这里介绍一下腾讯云对象存储在Laravel项目中的使用 1.申请腾讯云对象存储.创建Bucket.获取APPID等参 ...

  2. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  3. php 腾讯云 对象存储V5版本 获取返回的上传文件的链接方法

    腾讯云 对象存储V5版本 文档地址:https://github.com/tencentyun/cos-php-sdk-v5 调用简单文件上传方法: 返回数据如下 Array ( [data:prot ...

  4. Docsify+腾讯云对象存储 COS,一键搭建云上静态博客

    最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...

  5. 腾讯云对象存储 COS搭建个人网站

    腾讯云对象存储 COS搭建个人网站,简单易操作,方便快捷.   只需要将你的网站资源上传即可,然后设置上你的自定义 CDN 加速域名,一个个人网站就上线啦!当然,你也可以不用设置自定义 CDN 加速域 ...

  6. .NET Core HttpClient调用腾讯云对象存储Web API的"ERROR_CGI_PARAM_NO_SUCH_OP"问题

    开门见山地说一下问题的原因:调用 web api 时请求头中多了双引号,请求体中少了双引号. 腾讯云提供的对象存储(COS)C# SDK 是基于 .NET Framework 用 WebRequest ...

  7. 腾讯云--对象存储cos绑定自定义域名

    1.登录腾讯云控制台,找到对象存储一栏 2.选择一个你想绑定域名的存储桶 3.进入你选择的存储桶,点击域名管理 4.选择自定义源站域名.在域名处填写你要设置的自定义域名,在源站类型处选择静态网站源站, ...

  8. 腾讯云对象存储COS新品发布——智能分层存储,自动优化您的存储成本

    近日,腾讯云正式发布对象存储新品--智能分层存储,能够根据用户数据的访问模式,自动地转换数据的冷热层级,为用户提供与标准存储一致的低延迟和高吞吐的产品体验,同时具有更低的存储成本. 熟悉数据存储的用户 ...

  9. 腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案 ...

  10. 腾讯云COS对象存储

    一.腾讯云COS 腾讯云对象存储 COS 是一种存储海量数据的分布式存储服务.COS 提供了多种对象的存储类型:标准存储.低频存储.归档存储. 二.为什么要使用TA 便宜: 个人用户有6个月的免费使用 ...

随机推荐

  1. 制作ubuntu22.04的根文件系统

    amd64 点击查看代码 制作Ubuntu 22.04的根文件系统涉及到几个关键步骤.以下是详细的步骤说明,包括创建目录结构.安装基本软件包以及配置系统. ### 步骤1:准备环境 首先,确保你的开发 ...

  2. FastAPI Cookie 和 Header 参数完全指南:从基础到高级实战 🚀

    title: FastAPI Cookie 和 Header 参数完全指南:从基础到高级实战 date: 2025/3/9 updated: 2025/3/9 author: cmdragon exc ...

  3. 【译】Visual Studio 中新的强大生产力特性

    有时候,生活中的小事才是最重要的.在最新版本的 Visual Studio 中,我们增加了一些功能和调整,目的是让您脸上带着微笑,让您更有效率.这里是其中的一些列表,如果您想要完整的列表,请查看发行说 ...

  4. Web前端入门第 12 问:HTML 常用属性一览

    HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. HTML 常用属性大约 70 个,是否又头大了?脸上笑嘻嘻,心里嘛...嘿嘿... 温馨提示:属性不用死记硬背, ...

  5. .NET8中gRPC的使用

    在现代分布式系统中,服务之间的通信是一个非常重要的环节.随着微服务架构的流行,服务之间的通信方式也在不断演进.gRPC作为一种高性能.跨语言的RPC框架,逐渐成为了我们的首选. 一.简介 gRPC 是 ...

  6. Ubuntu 下查看 ip

    博客地址:https://www.cnblogs.com/zylyehuo/ ip a

  7. JVM堆内存(heap)详解

    JAVA堆内存管理是影响性能主要因素之一.堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的.先看下JAVA堆内存是如何划分的,如图:Java堆内存又溢出 ...

  8. java的数据类型之基本类型

    强类型语言 要求变量的使用要严格符合规定,所有变量都必须先定义后使用.如果没有按照指定要求使用变量,则该变量将报错.java就是强类型语言. java的两大数据类型 1.基本类型 2.引用类型 其中基 ...

  9. 【Linux】5.8 Shell流程控制

    Shell 流程控制 1. 判断语句 1.1 if判断 if else-if else 语法格式: if condition1 then command1 elif condition2 then c ...

  10. CoreOS 发行版本介绍

    大多数的软件通常都有什么内测版.公测版什么的. CoreOS 发行版本 而在 CoreOS 中, 有以下3个版本: alpha - α版,音译:阿尔法,俗称尝鲜版,是最新的版本,但是容易出现bug,最 ...