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);
}
@NotNull
private 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
*/
@NotNull
public 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 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;
}
}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

