JAVA 对象存储OSS工具类(腾讯云)

对象存储OSS工具类

在这里插入图片描述

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.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.model.ciModel.persistence.PicOperations;
import com.qcloud.cos.region.Region;
import com.wangyao.common.config.TencentOssConfig;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;@Slf4j
public class CosUtil {private static final TencentOssConfig CONFIG;private static final String RULE_STR = "imageMogr2/format/webp";private static final String EXT = "^(jpg|jpeg|png|gif)$";public static final int INT = 1024;static {CONFIG = SpringUtil.getBean(TencentOssConfig.class);}@NotNullprivate static COSClient createCosClient() {COSCredentials cred = new BasicCOSCredentials(CONFIG.getSecretId(), CONFIG.getSecretKey());ClientConfig clientConfig = new ClientConfig();clientConfig.setRegion(new Region(CONFIG.getRegion()));return new COSClient(cred, clientConfig);}/*** 上传OSS 自定义 Key** @param inputStream 文件流* @param key         key* @return String*/@SuppressWarnings("unused")public static String upOssByKey(InputStream inputStream, String key, String fileName) {return upOssByKey(inputStream, key, CONFIG.getBucket(), fileName);}/*** 上传OSS 自定义 Key** @param inputStream 文件流* @param key         key* @param bucket      桶名* @return String*/public static String upOssByKey(InputStream inputStream, String key, String bucket, String fileName) {return upOss(inputStream, null, key, bucket, fileName);}/*** 上传OSS** @param inputStream 文件流* @param keyPrefix   key前缀* @return String*/@NotNullpublic static String upOss(InputStream inputStream, String keyPrefix, String fileName) {return upOss(inputStream, keyPrefix, CONFIG.getBucket(), fileName);}/*** 上传OSS** @param file      文件* @param keyPrefix key前缀* @return String*/public static String upOss(MultipartFile file, String keyPrefix, String fileName) {return upOss(file, keyPrefix, null, CONFIG.getBucket(), fileName);}/*** 上传OSS** @param inputStream 文件流* @param keyPrefix   key前缀* @param bucket      桶名* @return String*/public static String upOss(InputStream inputStream, String keyPrefix, String bucket, String fileName) {return upOss(inputStream, keyPrefix, null, bucket, fileName);}@NotNull@SuppressWarnings("unused")public static String upOssKey(InputStream inputStream, String keyPrefix, String key, String fileName) {return upOss(inputStream, keyPrefix, key, CONFIG.getBucket(), fileName);}/*** 上传网络图片到OSS* @param url 网络路径* @return String*/public static String upOss(String url, String keyPrefix, String fileName) {try {SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(), NoopHostnameVerifier.INSTANCE);try (CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(scsf).build();) {HttpGet httpget = new HttpGet(url);HttpResponse response = client.execute(httpget);return upOss(response.getEntity().getContent(), keyPrefix, CONFIG.getBucket(), fileName);}} catch (Exception e) {log.error("上传网络图片到OSS失败:", e);}return null;}private static String upOss(InputStream inputStream, String keyPrefix, String key, String bucket, @NotNull String fileName) {var cosClient = createCosClient();var compressPath = "https://455.cos.ap-beijing.myqcloud.com/";key = getString(keyPrefix, key, fileName);log.info("key={}", key);String type = fileName.substring(fileName.lastIndexOf(".") + 1);ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType(type);try {PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, inputStream, objectMetadata);if (type.toLowerCase().matches(EXT)) {extracted(bucket, fileName, putObjectRequest);}PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);String eTag = putObjectResult.getETag();log.info("eTag = {}", eTag);cosClient.shutdown();} catch (Exception e) {log.error("Cos Upload Failed. ", e);}String result = compressPath + key;log.info("Cos Upload Path: {}", result);return result;}private static String getString(String keyPrefix, String key, String fileName) {if (StringUtils.isBlank(key)) {key = StringUtils.isNotBlank(keyPrefix) ? keyPrefix + fileName : fileName;}return key;}private static void extracted(String bucket, String fileName, PutObjectRequest putObjectRequest) {//如果图片比较大就进行压缩。否则就直接上传PicOperations picOperations = new PicOperations();// 添加图片处理规则List<PicOperations.Rule> ruleList = new LinkedList<>();PicOperations.Rule rule = new PicOperations.Rule();rule.setBucket(bucket);rule.setFileId(fileName);rule.setRule(RULE_STR);ruleList.add(rule);picOperations.setRules(ruleList);putObjectRequest.setPicOperations(picOperations);}@SuppressWarnings("all")private static String upOss(@NotNull MultipartFile file, String keyPrefix, String key, String bucket, String fileName) {COSClient cosClient = createCosClient();String compressPath = "https://455.cos.ap-beijing.myqcloud.com/";key = getString(keyPrefix, key, fileName);log.info("key={}", key);String type = fileName.substring(fileName.lastIndexOf(".") + 1);ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentType(type);try {PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, file.getInputStream(), objectMetadata);if (type.toLowerCase().matches(EXT)) {//如果图片比较大就进行压缩。否则就直接上传if (file.getSize() > INT * INT) {extracted(bucket, fileName, putObjectRequest);}}PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);String eTag = putObjectResult.getETag();log.info("eTag = {}", eTag);cosClient.shutdown();} catch (Exception e) {log.error("Cos Upload Failed. ", e);}String result = compressPath + key;log.info("Cos Upload Path: {}", result);return result;}}

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

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

相关文章

基于java+springboot+vue实现的仓库管理系统(文末源码+lw+ppt)23-499

第1章 绪论 伴随着信息社会的飞速发展&#xff0c;仓库管理所面临的问题也一个接一个的出现&#xff0c;所以现在最该解决的问题就是信息的实时查询和访问需求的问题&#xff0c;以及如何利用快捷便利的方式让访问者在广大信息系统中进行查询、分享、储存和管理。这对我们的现…

WordPress:快速搭建站点,wp安装及模版介绍

最近搭建个人站点比较多&#xff0c;都是想把业务做到国外&#xff0c;通过google来引流&#xff0c;那我们今年就来介绍一个比较受欢迎的站点平台wordPress。WordPress是使用PHP语言开发的博客平台&#xff0c;用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也…

JavaScript 中的面向对象编程--->构造函数--->原型对象与原型链,由浅入深详细讲解!

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享JavaScript 中的面向对象编程--->构造函数--->原型对象与原型链&#xff0c;由浅入深详细讲解&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&am…

【算法训练记录——Day42】

Day42——动态规划Ⅳ 1.leetcode_1049最后一块石头的重量II2.leetcode_494目标和3.leetcode_474一和零 1.leetcode_1049最后一块石头的重量II 思路&#xff1a;石头只能用一次。。。怎么才能让碰撞后重量最小呢&#xff0c;还要转换成动态规划&#xff0c;难以理解。。 看题解&…

基于轨迹信息的图像近距离可行驶区域方案验证

一 图像可行驶区域方案 1.1 标定场景 1.2 标定步骤 设计一定间距标定场&#xff0c;在标定场固定位置设置摄像头标定标识点。主车开到标定场固定位置录制主车在该位置各个摄像头数据&#xff0c;通过摄像头捕获图像获取图像上关键点坐标pts-2d基于标定场设计&#xff0c;计算…

恢复出厂设置手机变成砖

上周&#xff0c;许多Google Pixel 6&#xff08;6、6a、6 Pro&#xff09;手机用户在恢复出厂设置后都面临着设备冻结的问题。 用户说他们在下载过程中遇到了丢失 tune2fs 文件的错误 。 这会导致屏幕显示以下消息&#xff1a;“Android 系统无法启动。您的数据可能会被损坏…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式&#xff08;Prompt-tuning&#xff0c;Prefix-tuning&#xff0c;P-tuning&#xff09; &#xff0c;主要是围绕NLP上的成果&#xff0c;具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管&#xff08;Seven-Segment Display&#xff09;是一种常见的显示设备&#xff0c;广…

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形&#xff0c;分割成一系列互不重叠的三角形&#xff0c;其重要性就在这不多赘述。这个是一个别人总结的链接&#xff1a;http://vterrain.org/Implementation/Libs/triangulate.html 图片链接&#xff1a;http://www-cgrl.cs.m…

【笔记】在window上连接虚拟机中的redis

愚昧啊 困扰了我近两天的问题居然是因为是java代码写错地方了 在虚拟机中进入redis.conf文件 vim redis.conf /bind --斜杠搜索关键词 将值设置为 bind 0.0.0.0 保存 退出:wq 回到java中 添加redis依赖 刷新maven 就是在这一步出问题……………………………………自己在蓝…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器&#xff0c;专为低压和中压应用而设计&#xff0c;尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造&#xff0c;采用专利设计&#xff0c;将电阻元件与水基冷却液封装并完全分离&#xff0c;为水冷应用提供模块化、轻量级、小容量、高功率解…

PYTHON自学笔记(一)vscode配置

安装python 自行官网下载 安装vscode 自行官网下载 环境变量设置 把python和scripts的文件路径&#xff0c;添加到环境变量的path中&#xff0c;如图&#xff1a; 此项不弄&#xff0c;在命令行模式中系统不会认为你装了python和pip&#xff0c;你的输入相关命令shell不会…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 &#x1f4d1;引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

ComfyUI+MuseV+MuseTalk图片数字人

电脑配置 GPU12G&#xff0c;如果自己电脑配置不够&#xff0c;选择云gpu&#xff0c;我就是用的这个&#xff0c;自己电脑太老配置跟不上 环境&#xff1a; Python 3.11.8 torch 2.2.1 cuda_12.1 资源提供&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_idZbF…

subset使用

在R语言中&#xff0c;subset()函数用于从数据框中选择满足特定条件的观测。其语法如下&#xff1a; subset(x, subset, select, drop FALSE) 参数说明&#xff1a; x&#xff1a;数据框或矩阵。 subset&#xff1a;逻辑条件&#xff0c;用于筛选满足特定条件的行。 select…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个&#xff1f; SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

axios和Mybatis

除了get和post方法还有其他的方法&#xff1a; 发送 PUT 请求 发送 PUT 请求通常用于更新服务器上的资源。 const updateData {title: foo updated,body: bar updated,userId: 1 };axios.put(https://jsonplaceholder.typicode.com/posts/1, updateData).then(function (res…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数&#xff0c;&#xff0c;提供免费的股票数据API&#xff0c;可以通过其提供的接口获取实时和历史的股票数据。 API接口&#xff1a;http://api.mairui.club/hslt/new/您的licence 备用接口&#xff1a;http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…