腾讯云对象存储工具类和demo
使用
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的更多相关文章
- Laravel项目使用腾讯云对象存储上传图片(cos-php-sdk-v5版本)
为了加快网站访问速度.降低网站负载,现在越来越多的网站选择把图片等静态文件放在云上,这里介绍一下腾讯云对象存储在Laravel项目中的使用 1.申请腾讯云对象存储.创建Bucket.获取APPID等参 ...
- 微信小程序基于腾讯云对象存储的图片上传
在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...
- php 腾讯云 对象存储V5版本 获取返回的上传文件的链接方法
腾讯云 对象存储V5版本 文档地址:https://github.com/tencentyun/cos-php-sdk-v5 调用简单文件上传方法: 返回数据如下 Array ( [data:prot ...
- Docsify+腾讯云对象存储 COS,一键搭建云上静态博客
最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...
- 腾讯云对象存储 COS搭建个人网站
腾讯云对象存储 COS搭建个人网站,简单易操作,方便快捷. 只需要将你的网站资源上传即可,然后设置上你的自定义 CDN 加速域名,一个个人网站就上线啦!当然,你也可以不用设置自定义 CDN 加速域 ...
- .NET Core HttpClient调用腾讯云对象存储Web API的"ERROR_CGI_PARAM_NO_SUCH_OP"问题
开门见山地说一下问题的原因:调用 web api 时请求头中多了双引号,请求体中少了双引号. 腾讯云提供的对象存储(COS)C# SDK 是基于 .NET Framework 用 WebRequest ...
- 腾讯云--对象存储cos绑定自定义域名
1.登录腾讯云控制台,找到对象存储一栏 2.选择一个你想绑定域名的存储桶 3.进入你选择的存储桶,点击域名管理 4.选择自定义源站域名.在域名处填写你要设置的自定义域名,在源站类型处选择静态网站源站, ...
- 腾讯云对象存储COS新品发布——智能分层存储,自动优化您的存储成本
近日,腾讯云正式发布对象存储新品--智能分层存储,能够根据用户数据的访问模式,自动地转换数据的冷热层级,为用户提供与标准存储一致的低延迟和高吞吐的产品体验,同时具有更低的存储成本. 熟悉数据存储的用户 ...
- 腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案 ...
- 腾讯云COS对象存储
一.腾讯云COS 腾讯云对象存储 COS 是一种存储海量数据的分布式存储服务.COS 提供了多种对象的存储类型:标准存储.低频存储.归档存储. 二.为什么要使用TA 便宜: 个人用户有6个月的免费使用 ...
随机推荐
- 【Python】读取写入INI文件
最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option.如果都用abaqus的getinput()和getinputs()函数,那输入的 ...
- 质数测试——Fermat素数测试和MillerRabin素数测试
质数测试 今天我来填坑了,之前我在数学基础算法--质数篇这篇文章中提到我要单独讲一下MillerRabin算法,最近已经有许多粉丝在催了,所以我马不停蹄的来出这篇文章了,顺便把Fermat素数测试也讲 ...
- DELPHI 检测服务器地址是否有效
利用DELPH 的ICMP控件检测服务器地址 function CheckNetServer():Boolean; begin IdIcmpClient1.Host := '192.168.1.230 ...
- 关于CH182LED配置的说明
CH182的LED配置有两种模式: 传统LED功能 该功能可通过页7寄存器19控制bit 3-5控制 使用时可将页7寄存器19 bit3 置0 通过bit4-5实现不同模式,默认情况下bit3为0,b ...
- MONyog入门总结
1.安装步骤 1)安装MONyog_6.6.3.exe文件,步骤如下: 2)停止MONyog服务 3)将MONyog.exe和MONyog-patch.exe文件放到E:\MONyog\bin目录下 ...
- nginx禁止IP访问,仅供域名访问(域名访问限制不严格漏洞)
域名访问限制不严格漏洞解决 nginx添加相关配置 通过default_server,在http中最前面加上该配置 server { listen 80 default_server; server_ ...
- 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 ...
- 题解:CF361B Levko and Permutation
前置芝士--最大公约数 - OI Wiki 题目其实很简单,我们可以知道一些最大公约数的性质: 有一个数 xxx,则: gcd(x,x−1)=1gcd(1,x)=1\gcd(x,x-1)=1 \\ ...
- 在IIS发布.net9 api程序踩坑总结
参照:.NET 9.0 WebApi 发布到 IIS 详细步骤_webapi发布到iis-CSDN博客 环境搭建: 注意安装与程序版本对应的Windows Server Hosting,安装完成之后, ...
- Python3爬虫批量爬取图片并保存到本地
看新闻的时候忽然发现了一个图片网站,那肯定得爬一下. 网址:https://www.0xu.cn/ 不难发现,qcmn这个路径对应青春美女 右键检查图片地址可见 访问该地址成功访问到了图片 正式开始 ...