package com.qianwen.core.oss; import com.aliyun.oss.OSSClient; import com.aliyun.oss.common.utils.BinaryUtil; import com.aliyun.oss.model.GetObjectRequest; import com.aliyun.oss.model.MatchMode; import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PolicyConditions; import com.aliyun.oss.model.PutObjectResult; import java.io.InputStream; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.oss.model.OssFile; import com.qianwen.core.oss.props.OssProperties; import com.qianwen.core.oss.rule.OssRule; import com.qianwen.core.tool.jackson.JsonUtil; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; /* loaded from: blade-starter-oss-9.3.0.0-SNAPSHOT.jar:org/springblade/core/oss/AliossTemplate.class */ public class AliossTemplate implements OssTemplate { private final OSSClient ossClient; private final OssProperties ossProperties; private final OssRule ossRule; public AliossTemplate(final OSSClient ossClient, final OssProperties ossProperties, final OssRule ossRule) { this.ossClient = ossClient; this.ossProperties = ossProperties; this.ossRule = ossRule; } @Override // com.qianwen.core.oss.OssTemplate public void makeBucket(String bucketName) { if (!bucketExists(bucketName)) { this.ossClient.createBucket(getBucketName(bucketName)); } } @Override // com.qianwen.core.oss.OssTemplate public void removeBucket(String bucketName) { this.ossClient.deleteBucket(getBucketName(bucketName)); } @Override // com.qianwen.core.oss.OssTemplate public boolean bucketExists(String bucketName) { return this.ossClient.doesBucketExist(getBucketName(bucketName)); } @Override // com.qianwen.core.oss.OssTemplate public void copyFile(String bucketName, String fileName, String destBucketName) { this.ossClient.copyObject(getBucketName(bucketName), fileName, getBucketName(destBucketName), fileName); } @Override // com.qianwen.core.oss.OssTemplate public void copyFile(String bucketName, String fileName, String destBucketName, String destFileName) { this.ossClient.copyObject(getBucketName(bucketName), fileName, getBucketName(destBucketName), destFileName); } @Override // com.qianwen.core.oss.OssTemplate public OssFile statFile(String fileName) { return statFile(this.ossProperties.getBucketName(), fileName); } @Override // com.qianwen.core.oss.OssTemplate public OssFile statFile(String bucketName, String fileName) { ObjectMetadata stat = this.ossClient.getObjectMetadata(getBucketName(bucketName), fileName); OssFile ossFile = new OssFile(); ossFile.setName(fileName); ossFile.setLink(fileLink(ossFile.getName())); ossFile.setHash(stat.getContentMD5()); ossFile.setLength(stat.getContentLength()); ossFile.setPutTime(stat.getLastModified()); ossFile.setContentType(stat.getContentType()); return ossFile; } @Override // com.qianwen.core.oss.OssTemplate public String filePath(String fileName) { return getOssHost().concat("/").concat(fileName); } @Override // com.qianwen.core.oss.OssTemplate public String filePath(String bucketName, String fileName) { return getOssHost(bucketName).concat("/").concat(fileName); } @Override // com.qianwen.core.oss.OssTemplate public String fileLink(String fileName) { return getOssHost().concat("/").concat(fileName); } @Override // com.qianwen.core.oss.OssTemplate public String fileLink(String bucketName, String fileName) { return getOssHost(bucketName).concat("/").concat(fileName); } @Override // com.qianwen.core.oss.OssTemplate public InputStream getObject(String bucketName, String fileName, Long offset, Long length) { return get(bucketName, fileName, offset, length); } @Override // com.qianwen.core.oss.OssTemplate public InputStream getObject(String fileName, Long offset, Long length) { return get(this.ossProperties.getBucketName(), fileName, offset, length); } @Override // com.qianwen.core.oss.OssTemplate public InputStream getObject(String bucketName, String fileName) { return get(bucketName, fileName); } @Override // com.qianwen.core.oss.OssTemplate public InputStream getObject(String fileName) { return get(this.ossProperties.getBucketName(), fileName); } @Override // com.qianwen.core.oss.OssTemplate public BladeFile putFile(MultipartFile file) { return putFile(this.ossProperties.getBucketName(), file.getOriginalFilename(), file); } @Override // com.qianwen.core.oss.OssTemplate public BladeFile putFile(String fileName, MultipartFile file) { return putFile(this.ossProperties.getBucketName(), fileName, file); } @Override // com.qianwen.core.oss.OssTemplate public BladeFile putFile(String bucketName, String fileName, MultipartFile file) { try { return putFile(bucketName, fileName, file.getInputStream()); } catch (Exception ex) { throw new RuntimeException(ex); } } @Override // com.qianwen.core.oss.OssTemplate public BladeFile putFile(String fileName, InputStream stream) { return putFile(this.ossProperties.getBucketName(), fileName, stream); } @Override // com.qianwen.core.oss.OssTemplate public BladeFile putFile(String bucketName, String fileName, InputStream stream) { return put(bucketName, stream, fileName, false); } public BladeFile put(String bucketName, InputStream stream, String key, boolean cover) { makeBucket(bucketName); String key2 = getFileName(key); if (cover) { this.ossClient.putObject(getBucketName(bucketName), key2, stream); } else { PutObjectResult response = this.ossClient.putObject(getBucketName(bucketName), key2, stream); for (int retry = 0; StringUtils.isEmpty(response.getETag()) && retry < 5; retry++) { response = this.ossClient.putObject(getBucketName(bucketName), key2, stream); } } BladeFile file = new BladeFile(); file.setOriginalName(key); file.setName(key2); file.setDomain(getOssHost(bucketName)); file.setLink(fileLink(bucketName, key2)); return file; } public InputStream get(String bucketName, String key) { OSSObject ossObject = this.ossClient.getObject(getBucketName(bucketName), key); return ossObject.getObjectContent(); } public InputStream get(String bucketName, String key, Long offset, Long length) { GetObjectRequest getObjectRequest = new GetObjectRequest(getBucketName(bucketName), key); getObjectRequest.setRange(offset.longValue(), new BigDecimal(offset.longValue()).add(new BigDecimal(length.longValue())).longValue()); OSSObject ossObject = this.ossClient.getObject(getObjectRequest); return ossObject.getObjectContent(); } @Override // com.qianwen.core.oss.OssTemplate public void removeFile(String fileName) { this.ossClient.deleteObject(getBucketName(), fileName); } @Override // com.qianwen.core.oss.OssTemplate public void removeFile(String bucketName, String fileName) { this.ossClient.deleteObject(getBucketName(bucketName), fileName); } @Override // com.qianwen.core.oss.OssTemplate public void removeFiles(List fileNames) { fileNames.forEach(this::removeFile); } @Override // com.qianwen.core.oss.OssTemplate public void removeFiles(String bucketName, List fileNames) { fileNames.forEach(fileName -> { removeFile(getBucketName(bucketName), fileName); }); } private String getBucketName() { return getBucketName(this.ossProperties.getBucketName()); } private String getBucketName(String bucketName) { return this.ossRule.bucketName(bucketName); } private String getFileName(String originalFilename) { return this.ossRule.fileName(originalFilename); } public String getUploadToken() { return getUploadToken(this.ossProperties.getBucketName()); } public String getUploadToken(String bucketName) { return getUploadToken(bucketName, ((Long) this.ossProperties.getArgs().get("expireTime", 3600L)).longValue()); } public String getUploadToken(String bucketName, long expireTime) { long expireEndTime = System.currentTimeMillis() + (expireTime * 1000); Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem("content-length-range", 0L, ((Integer) this.ossProperties.getArgs().get("contentLengthRange", 10485760)).intValue()); policyConds.addConditionItem(MatchMode.StartWith, "key", "upload"); String postPolicy = this.ossClient.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = this.ossClient.calculatePostSignature(postPolicy); Map respMap = new LinkedHashMap<>(16); respMap.put("accessid", this.ossProperties.getAccessKey()); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", "upload"); respMap.put("host", getOssHost(bucketName)); respMap.put("expire", String.valueOf(expireEndTime / 1000)); return JsonUtil.toJson(respMap); } public String getOssHost(String bucketName) { String prefix = this.ossProperties.getEndpoint().contains("https://") ? "https://" : "http://"; return prefix + getBucketName(bucketName) + "." + this.ossProperties.getEndpoint().replaceFirst(prefix, ""); } public String getOssHost() { return getOssHost(this.ossProperties.getBucketName()); } }