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.mzph.cn/news/866917.shtml

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

相关文章

SpringBoot的在线教育平台-计算机毕业设计源码68562

摘要 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;在线教育已成为教育领域的重要趋势。为了满足广大学习者对于灵活、高效学习方式的需求&#xff0c;基于Spring Boot的在线教育平台应运而生。Spring Boot以其快速开发、简便部署以及良好的可扩展性&#xff0c…

LeetCode 算法:二叉树的最近公共祖先 III c++

原题链接&#x1f517;&#xff1a;二叉树的最近公共祖先 难度&#xff1a;中等⭐️⭐️ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点…

扫地机器人如何利用图算法来进行避障策略和优化清扫路径的?

前言 扫地机器人是现代家庭中最常见的智能设备。其基本的核心组件由主控系统&#xff08;大脑&#xff09;、传感器等控制系统&#xff08;感知系统&#xff09;、动力供应系统&#xff08;心脏&#xff09;、清扫系统&#xff08;四肢&#xff09;组成。 扫地机器人的智能、高…

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式&#xff0c;lvgl的布局方式比较少&#xff0c;目前只有flex和grid两大类布局&#xff0c;即弹性布局和网格布局&#xff0c;弹性布局一般就是指定相对位置&#xff0c;网格布局就是将整个页面划分为网格状&#xff0c;我们做其它的UI…

2-3 图像分类数据集

MNIST数据集是图像分类任务中广泛使用的数据集之一&#xff0c;但作为基准数据集过于简单&#xff0c;我们将使用类似但更复杂的Fashion-MNIST数据集。 %matplotlib inline import torch import torchvision # pytorch模型关于计算机视觉模型实现的一个库 from torch.utils i…

面试题 4:阐述以下方法 @classmethod, @staticmethod, @property?

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

绘唐科技聚星文社是同款一键生成工具

聚星文社是同款一键生成工具 工具下载 绘唐科技成立于2015年&#xff0c;是一家专注于虚拟现实&#xff08;VR&#xff09;技术和产品开发的高科技企业。绘唐科技的目标是利用虚拟现实技术为人们带来更加沉浸式的体验&#xff0c;推动虚拟现实在各个领域的应用和发展。 绘唐科…

LabVIEW环境下OCR文字识别的实现策略与挑战解析

引言 在自动化测试领域&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术扮演着重要角色&#xff0c;它能够将图像中的文字转换成机器可编辑的格式。对于使用LabVIEW约5个月&#xff0c;主要进行仪器控制与数据采集的你而言…

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力&#xff0c;但是如何让它完美地完成一个大的问题&#xff0c;仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示&#xff08;Prompt&#xff09;。对于一个复杂的应用场景&#xff0c;编写一套完整的&#xff0c;准确无误的提示&am…

jmeter-beanshell学习1-vars使用获取变量和设置变量

最近又开始了用jmeter做自动化&#xff0c;不管怎么实现&#xff0c;都逃离不了用beanshell&#xff0c;最后把所有校验都放在了beanshell判断&#xff0c;效果还不错。 首先jmeter有很多beanshell相关的元件&#xff0c;取样器、前置处理器、后置处理器、断言&#xff0c;暂时…

南方航空阿里v2滑块验证码逆向分析思路学习

目录 一、声明&#xff01; 二、介绍 三、请求流程分析&#xff1a; 1.拿验证码 2.提交第一次设备信息 3.提交第二次设备信息 4.提交验证 ​编辑 四、接口响应数据分析&#xff1a; 1.拿验证码 2.提交第一次设备信息 3.提交第二次设备信息 4.提…

代码随想录第43天|动态规划

121. 买卖股票的最佳时机 股票只能被买卖一次 dp[i][0] 持有股票所得到的最大现金, dp[i][1] 不持有股票所得的最大现金, 避免定义多个变量递推公式: dp[i][0] 可能是在之前买入, 也可能是在这次被买入 max(dp[i - 1][0],-prices[i])dp[i][1] 可能是在本次抛售, 也可能在之…

误删分区后的数据拯救:双管齐下恢复策略

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而误删分区作为常见的数据安全威胁之一&#xff0c;常常让用户措手不及。本文将深入探讨误删分区的现象&#xff0c;并为您揭示两种高效的数据恢复方案&#xff0c;旨在帮助您在最短时间内找回失去的数据&#xff0c;同…

RH850系列芯片深度剖析 1.8-内存管理之MPU

RH850系列芯片深度剖析 1.8-内存管理之MPU 文章目录 RH850系列芯片深度剖析 1.8-内存管理之MPU一、MPU简介1.1 功能特性1.2 系统保护标识符(SPID)二、保护区域设置2.1 保护区域属性设置2.2 保护区域设置注意事项2.2.1 跨越保护区域边界2.2.2 无效的保护区域设置2.2.3 保护违规…

当火热的Mamba遇到火热的YOLO,会发生怎么样的反应吗?

作者&#xff1a;浙江师范大学 论文地址&#xff1a;https://arxiv.org/pdf/2406.05835 代码地址&#xff1a;https://github.com/HZAI-ZJNU/Mamba-YOLO 目录 前言一、摘要二、介绍二、相关工作2.1 实时目标检测器2.2 端到端的目标检测器2.3 视觉状态空间模型 三 方法3.1 基础知…

Amesim应用篇-信号传递

前言 在Amesim中常见的信号传递是通过信号线连接&#xff0c;针对简单的模型通过信号线连接还可以是信号线清晰规整&#xff0c;方便查看。如果模型较复杂&#xff0c;传递信号的元件较多时&#xff0c;此时再继续使用信号线进行信号传递&#xff0c;可能会使草图界面看起来杂…

Leetcode - 周赛403

目录 一&#xff0c;3200. 三角形的最大高度 二&#xff0c;3195. 包含所有 1 的最小矩形面积 I 三&#xff0c;3196. 最大化子数组的总成本 四&#xff0c;3197. 包含所有 1 的最小矩形面积 II 一&#xff0c;3200. 三角形的最大高度 本题是一道模拟题&#xff0c;可以先排…

【Leetcode笔记】406.根据身高重建队列

文章目录 1. 题目要求2.解题思路 注意3.ACM模式代码 1. 题目要求 2.解题思路 首先&#xff0c;按照每个人的身高属性&#xff08;即people[i][0]&#xff09;来排队&#xff0c;顺序是从大到小降序排列&#xff0c;如果遇到同身高的&#xff0c;按照另一个属性&#xff08;即p…

分享超级实用的3款AI工具,让工作效率轻松翻倍

Hey&#xff0c;职场小伙伴们&#xff01;每天被堆积如山的工作压得喘不过气&#xff1f;加班成了日常&#xff0c;效率却不见提高&#xff1f;别急&#xff0c;今天就让我来给你们揭秘3款AI神器&#xff0c;它们将是你职场上的得力助手&#xff0c;让你的工作效率轻松翻倍&…

AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验

随着增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;其在各个领域的应用日益广泛。这项技术通过实时计算摄影机影像的位置及角度&#xff0c;将虚拟信息叠加到真实世界中&#xff0c;为用户带来超越现实的感官体验。AR视频技术不仅极大地丰富了我们的视觉体验&a…