使用

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. 【Python】读取写入INI文件

    最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option.如果都用abaqus的getinput()和getinputs()函数,那输入的 ...

  2. 质数测试——Fermat素数测试和MillerRabin素数测试

    质数测试 今天我来填坑了,之前我在数学基础算法--质数篇这篇文章中提到我要单独讲一下MillerRabin算法,最近已经有许多粉丝在催了,所以我马不停蹄的来出这篇文章了,顺便把Fermat素数测试也讲 ...

  3. DELPHI 检测服务器地址是否有效

    利用DELPH 的ICMP控件检测服务器地址 function CheckNetServer():Boolean; begin IdIcmpClient1.Host := '192.168.1.230 ...

  4. 关于CH182LED配置的说明

    CH182的LED配置有两种模式: 传统LED功能 该功能可通过页7寄存器19控制bit 3-5控制 使用时可将页7寄存器19 bit3 置0 通过bit4-5实现不同模式,默认情况下bit3为0,b ...

  5. MONyog入门总结

    1.安装步骤 1)安装MONyog_6.6.3.exe文件,步骤如下: 2)停止MONyog服务 3)将MONyog.exe和MONyog-patch.exe文件放到E:\MONyog\bin目录下 ...

  6. nginx禁止IP访问,仅供域名访问(域名访问限制不严格漏洞)

    域名访问限制不严格漏洞解决 nginx添加相关配置 通过default_server,在http中最前面加上该配置 server { listen 80 default_server; server_ ...

  7. React AntD的Dropdown组件报错:React.Children.only expected to receive a single React element child.可能的n原因

    React.Children.only expected to receive a single React element child. Error: React.Children.only exp ...

  8. 题解:CF361B Levko and Permutation

    前置芝士--最大公约数 - OI Wiki 题目其实很简单,我们可以知道一些最大公约数的性质: 有一个数 xxx,则: gcd⁡(x,x−1)=1gcd⁡(1,x)=1\gcd(x,x-1)=1 \\ ...

  9. 在IIS发布.net9 api程序踩坑总结

    参照:.NET 9.0 WebApi 发布到 IIS 详细步骤_webapi发布到iis-CSDN博客 环境搭建: 注意安装与程序版本对应的Windows Server Hosting,安装完成之后, ...

  10. Python3爬虫批量爬取图片并保存到本地

    看新闻的时候忽然发现了一个图片网站,那肯定得爬一下. 网址:https://www.0xu.cn/ 不难发现,qcmn这个路径对应青春美女 右键检查图片地址可见 访问该地址成功访问到了图片 正式开始 ...