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,一经查实,立即删除!

相关文章

vscode 工程中 c_cpp_properties.json文件作用

在 Visual Studio Code&#xff08;VSCode&#xff09;开发C或C项目时&#xff0c;c_cpp_properties.json 文件是一个非常重要的配置文件&#xff0c;主要由微软提供的 C/C 扩展&#xff08;C/C extension from Microsoft&#xff09;使用。它主要用于配置 IntelliSense&#x…

postgrelDB的订阅的暂停 启用 强制同步 重新初始化订阅的介绍

在 PostgreSQL 中,如果你使用的是逻辑复制(Logical Replication)来实现数据库A的表1发布,数据库C订阅表1的场景,那么你可以通过以下步骤来强制同步数据库A的表1到数据库C的表1。 步骤 暂停订阅:首先暂停数据库C上的订阅,以确保在你手动修改数据时不会有新的数据同步过…

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…

Typescript window.localStorage 存储 Obj Value区别

window.localStorage.setItem(UserC, JSON.stringify(userC)) const userC JSON.parse(window.localStorage.getItem(UserC) || {}) 不能获得UserC&#xff0c;所有保存的时候需要存储value&#xff0c;而不是对象。 {"__v_isShallow":false, "__v_isRef&quo…

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;主要进行仪器控制与数据采集的你而言…

探索Redis GEOMETRY数据结构:地理空间索引与查询(基于Redis GEO和Java实现附近商户查找功能)

摘要 Redis是一个高性能的键值存储系统&#xff0c;广泛应用于缓存、消息队列、排行榜等场景。本文将介绍Redis中一个假设的GEOMETRY数据结构&#xff0c;用于高效地存储和查询地理空间数据。 1. Redis地理空间数据结构概述 地理空间数据结构允许用户存储地理位置信息&#…

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

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

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

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

Linux 软件管理

Linux 软件管理 在 Linux 系统中&#xff0c;RPM&#xff08;Red Hat Package Manager&#xff09;和 YUM&#xff08;Yellowdog Updater, Modified&#xff09;是用于软件包管理的重要工具。 RPM RPM 是由 Red Hat 公司开发的软件包管理系统。 RPM 软件包通常具有 .rpm 扩…

南方航空阿里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 基础知…