Skip to content

Commit 2632aa7

Browse files
committed
fix(oss): 修改私有访问的 bucket previewUrl 链接的拼接
1 parent ba6d8f4 commit 2632aa7

4 files changed

Lines changed: 116 additions & 11 deletions

File tree

oss-spring-boot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<groupId>com.admin4j.framework</groupId>
1111
<artifactId>oss-spring-boot-starter</artifactId>
12-
<version>0.9.0</version>
12+
<version>0.9.1</version>
1313
<packaging>jar</packaging>
1414
<description>封装基于Amazon S3的OSS对象存储服务。在SpringBoot 中通过封装,简单地方式将文件存储到
1515
MinIO、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS等支持

oss-spring-boot-starter/src/main/java/com/admin4j/oss/OssProperties.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.admin4j.oss;
22

33
import lombok.Data;
4+
import org.apache.commons.lang3.StringUtils;
5+
import org.springframework.beans.factory.InitializingBean;
46
import org.springframework.boot.context.properties.ConfigurationProperties;
57

68
/**
@@ -9,7 +11,7 @@
911
*/
1012
@Data
1113
@ConfigurationProperties(prefix = "admin4j.oss")
12-
public class OssProperties {
14+
public class OssProperties implements InitializingBean {
1315
/**
1416
* 是否启用
1517
*/
@@ -64,4 +66,28 @@ public class OssProperties {
6466
* 最大线程数,默认: 100
6567
*/
6668
private Integer maxConnections = 100;
69+
70+
@Override
71+
public void afterPropertiesSet() throws Exception {
72+
init();
73+
}
74+
75+
/**
76+
* 初始化方法
77+
* - Endpoint 不能带 /
78+
* - PreviewUrl, IntranetUrl 需要带 /
79+
*/
80+
public void init() {
81+
82+
if (StringUtils.endsWith(getEndpoint(), "/")) {
83+
setEndpoint(StringUtils.substring(getEndpoint(), 0, -1));
84+
}
85+
86+
if (!StringUtils.endsWith(getPreviewUrl(), "/")) {
87+
setPreviewUrl(getPreviewUrl() + "/");
88+
}
89+
if (!StringUtils.endsWith(getIntranetUrl(), "/")) {
90+
setIntranetUrl(getIntranetUrl() + "/");
91+
}
92+
}
6793
}

oss-spring-boot-starter/src/main/java/com/admin4j/oss/impl/SimpleOSSUploadFileService.java

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.admin4j.oss.UploadFileService;
77
import com.admin4j.oss.entity.vo.UploadFileVO;
88
import com.amazonaws.services.s3.model.PutObjectResult;
9-
import lombok.RequiredArgsConstructor;
109
import org.apache.commons.codec.digest.DigestUtils;
1110
import org.apache.commons.lang3.StringUtils;
1211
import org.springframework.web.multipart.MultipartFile;
@@ -21,7 +20,7 @@
2120
* @author andanyang
2221
* @since 2023/4/14 9:27
2322
*/
24-
@RequiredArgsConstructor
23+
// @RequiredArgsConstructor
2524
public class SimpleOSSUploadFileService implements UploadFileService {
2625

2726
protected final static DateTimeFormatter FILEPATH_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
@@ -30,6 +29,12 @@ public class SimpleOSSUploadFileService implements UploadFileService {
3029

3130
protected final OssProperties ossProperties;
3231

32+
public SimpleOSSUploadFileService(OssTemplate ossTemplate, OssProperties ossProperties) {
33+
this.ossTemplate = ossTemplate;
34+
this.ossProperties = ossProperties;
35+
}
36+
37+
3338
/**
3439
* 上传文件
3540
*
@@ -45,11 +50,11 @@ public UploadFileVO upload(String path, MultipartFile file) throws IOException {
4550
uploadFileVO.setContentType(file.getContentType());
4651
uploadFileVO.setCreateTime(LocalDateTime.now());
4752
uploadFileVO.setBucket(defaultBucketName());
48-
//计算文件md5
53+
// 计算文件md5
4954
String md5 = DigestUtils.md5Hex(file.getBytes());
5055
uploadFileVO.setMd5(md5);
5156

52-
//生成文件存储路径
57+
// 生成文件存储路径
5358
if (StringUtils.isNotBlank(path)) {
5459
uploadFileVO.setPrefix(path);
5560
}
@@ -111,7 +116,7 @@ public UploadFileVO upload(String key, String originalFilename, String contentTy
111116
uploadFileVO.setContentType(contentType);
112117
uploadFileVO.setCreateTime(LocalDateTime.now());
113118
uploadFileVO.setBucket(defaultBucketName());
114-
//计算文件md5
119+
// 计算文件md5
115120
String md5 = DigestUtils.md5Hex(file.getBytes());
116121
uploadFileVO.setMd5(md5);
117122

@@ -133,7 +138,7 @@ public String getPreviewUrl(String key) {
133138
if (ossProperties.getExpires() == -1) {
134139
return ossProperties.getPreviewUrl() + key;
135140
} else {
136-
return getPrivateUrl(key, ossProperties.getExpires());
141+
return getPrivateUrl(ossProperties.getPreviewUrl(), key, ossProperties.getExpires());
137142
}
138143
}
139144
return getPrivateUrl(key, ossProperties.getExpires() == -1 ? 300 : ossProperties.getExpires());
@@ -153,6 +158,25 @@ public String getPrivateUrl(String key, Integer expires) {
153158
return ossTemplate.getObjectURL(defaultBucketName(), key, expires, TimeUnit.SECONDS);
154159
}
155160

161+
/**
162+
* 使用预览域名,通过OSS直接查看文件预览路径
163+
* 获取私有链接
164+
*
165+
* @param url 域名前缀
166+
* @param key oss key
167+
* @param expires 私有链接有效秒数
168+
* @return 文件阅览路径
169+
*/
170+
// @Override
171+
public String getPrivateUrl(String url, String key, Integer expires) {
172+
String objectURL = ossTemplate.getObjectURL(defaultBucketName(), key, expires, TimeUnit.SECONDS);
173+
if (StringUtils.isNotBlank(url)) {
174+
175+
return objectURL.replace(ossProperties.getEndpoint() + "/" + defaultBucketName() + "/", url);
176+
}
177+
return objectURL;
178+
}
179+
156180
/**
157181
* 文件内网阅览路径
158182
*
@@ -165,7 +189,7 @@ public String getPreviewIntranetUrl(String key) {
165189
if (ossProperties.getExpires() == -1) {
166190
return ossProperties.getIntranetUrl() + key;
167191
} else {
168-
return getPrivateUrl(key, ossProperties.getExpires());
192+
return getPrivateUrl(ossProperties.getIntranetUrl(), key, ossProperties.getExpires());
169193
}
170194
}
171195
return getPreviewUrl(key);
@@ -192,7 +216,7 @@ protected String generateFilePath(UploadFileVO uploadFileVO) {
192216
if (StringUtils.isNotBlank(uploadFileVO.getKey())) {
193217
return uploadFileVO.getKey();
194218
}
195-
//后缀
219+
// 后缀
196220
String postfix = null;
197221
if (StringUtils.isNotBlank(uploadFileVO.getOriginalFilename()) && StringUtils.contains(uploadFileVO.getOriginalFilename(), ".")) {
198222

@@ -201,7 +225,7 @@ protected String generateFilePath(UploadFileVO uploadFileVO) {
201225

202226
StringBuilder filePathBuilder = new StringBuilder();
203227

204-
//文件前缀
228+
// 文件前缀
205229
if (StringUtils.isNotBlank(uploadFileVO.getPrefix())) {
206230
filePathBuilder.append(uploadFileVO.getPrefix());
207231
if (!StringUtils.endsWith(uploadFileVO.getPrefix(), "/")) {
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.admin4j.oss.impl;
2+
3+
import com.admin4j.oss.AmazonS3Factory;
4+
import com.admin4j.oss.OssProperties;
5+
import com.amazonaws.services.s3.AmazonS3;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
9+
/**
10+
* @author andanyang
11+
* @since 2023/11/10 9:48
12+
*/
13+
class SimpleOSSUploadFileServiceTest {
14+
15+
static SimpleOSSUploadFileService simpleOSSUploadFileService;
16+
17+
@BeforeAll
18+
public static void init() {
19+
20+
OssProperties ossProperties = new OssProperties();
21+
ossProperties.setEndpoint("http://192.168.1.13:9901/");
22+
ossProperties.setAccessKey("4NdsQG6g6hzJfwko");
23+
ossProperties.setSecretKey("zeSSPz3WC3Wn4zBZsYtxK9YXhZ7Hjnnv");
24+
ossProperties.setBucket("crm-email");
25+
ossProperties.setPreviewUrl("http://192.168.1.13:9902/crm-email");
26+
ossProperties.setIntranetUrl("http://192.168.1.13:9902/crm/");
27+
ossProperties.setExpires(300);
28+
29+
ossProperties.init();
30+
31+
AmazonS3 amazonS3 = AmazonS3Factory.create(ossProperties);
32+
OssTemplateImpl ossTemplate = new OssTemplateImpl(amazonS3, ossProperties);
33+
34+
simpleOSSUploadFileService = new SimpleOSSUploadFileService(ossTemplate, ossProperties);
35+
}
36+
37+
@Test
38+
void getPreviewUrl() {
39+
40+
String previewUrl = simpleOSSUploadFileService.getPreviewUrl("attachment/20231005/cc56268d64944a7348d43741129292fa.jpg");
41+
System.out.println("previewUrl = " + previewUrl);
42+
}
43+
44+
@Test
45+
void getPrivateUrl() {
46+
}
47+
48+
@Test
49+
void testGetPrivateUrl() {
50+
}
51+
52+
@Test
53+
void getPreviewIntranetUrl() {
54+
}
55+
}

0 commit comments

Comments
 (0)