yangys
2024-03-27 e48aa2ac8dea1be5db11c63edf0b912c4ad5ce65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
package com.qianwen.core.oss;
 
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.CannedAccessControlList;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectResult;
 
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.List;
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 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/TencentCosTemplate.class */
public class TencentCosTemplate implements OssTemplate {
    private final COSClient cosClient;
    private final OssProperties ossProperties;
    private final OssRule ossRule;
 
    public TencentCosTemplate(final COSClient cosClient, final OssProperties ossProperties, final OssRule ossRule) {
        this.cosClient = cosClient;
        this.ossProperties = ossProperties;
        this.ossRule = ossRule;
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void makeBucket(String bucketName) {
        if (!bucketExists(bucketName)) {
            this.cosClient.createBucket(getBucketName(bucketName));
            this.cosClient.setBucketAcl(getBucketName(bucketName), CannedAccessControlList.PublicRead);
        }
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void removeBucket(String bucketName) {
        this.cosClient.deleteBucket(getBucketName(bucketName));
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public boolean bucketExists(String bucketName) {
        return this.cosClient.doesBucketExist(getBucketName(bucketName));
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void copyFile(String bucketName, String fileName, String destBucketName) {
        this.cosClient.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.cosClient.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.cosClient.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 getObject(bucketName, fileName, offset, length);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public InputStream getObject(String fileName, Long offset, Long length) {
        return getObject(this.ossProperties.getBucketName(), fileName, offset, length);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public InputStream getObject(String bucketName, String fileName) {
        return getObject(bucketName, fileName);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public InputStream getObject(String fileName) {
        return getObject(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 (IOException e) {
            throw new RuntimeException(e);
        }
    }
 
    @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 InputStream get(String bucketName, String fileName) {
        return this.cosClient.getObject(getBucketName(bucketName), fileName).getObjectContent();
    }
 
    public InputStream get(String bucketName, String fileName, Long offset, Long length) {
        GetObjectRequest getObjectRequest = new GetObjectRequest(getBucketName(bucketName), fileName);
        getObjectRequest.setRange(offset.longValue(), new BigDecimal(offset.longValue()).add(new BigDecimal(length.longValue())).longValue());
        return this.cosClient.getObject(getObjectRequest).getObjectContent();
    }
 
    public BladeFile put(String bucketName, InputStream stream, String key, boolean cover) {
        makeBucket(bucketName);
        String key2 = getFileName(key);
        if (cover) {
            this.cosClient.putObject(getBucketName(bucketName), key2, stream, (ObjectMetadata) null);
        } else {
            PutObjectResult response = this.cosClient.putObject(getBucketName(bucketName), key2, stream, (ObjectMetadata) null);
            for (int retry = 0; StringUtils.isEmpty(response.getETag()) && retry < 5; retry++) {
                response = this.cosClient.putObject(getBucketName(bucketName), key2, stream, (ObjectMetadata) null);
            }
        }
        BladeFile file = new BladeFile();
        file.setOriginalName(key);
        file.setName(key2);
        file.setDomain(getOssHost(bucketName));
        file.setLink(fileLink(bucketName, key2));
        return file;
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void removeFile(String fileName) {
        this.cosClient.deleteObject(getBucketName(), fileName);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void removeFile(String bucketName, String fileName) {
        this.cosClient.deleteObject(getBucketName(bucketName), fileName);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void removeFiles(List<String> fileNames) {
        fileNames.forEach(this::removeFile);
    }
 
    @Override // com.qianwen.core.oss.OssTemplate
    public void removeFiles(String bucketName, List<String> 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).concat("-").concat(this.ossProperties.getAppId());
    }
 
    private String getFileName(String originalFilename) {
        return this.ossRule.fileName(originalFilename);
    }
 
    public String getOssHost(String bucketName) {
        return "http://" + this.cosClient.getClientConfig().getEndpointBuilder().buildGeneralApiEndpoint(getBucketName(bucketName));
    }
 
    public String getOssHost() {
        return getOssHost(this.ossProperties.getBucketName());
    }
}