🌹什么是阿里云OSS

阿里云对象存储(Alibaba Cloud Object Storage Service,简称OSS)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。用户可以通过简单的API接口在任何时间、任何地点上传和下载数据,适用于图像、音视频、文档、网站等各种类型的数据存储和分发场景。

⭐阿里云OSS的优点

高可靠性:OSS采用了多副本存储和容灾备份机制,确保数据的高可靠性和持久性。
安全性:支持多种安全策略,如访问控制、加密传输等,保障数据的安全性。
弹性扩展:支持按需存储和弹性扩展,用户可以根据实际需求灵活调整存储容量。
低成本:OSS的存储费用低廉,且支持按量付费模式,使用户能够根据实际使用量付费

🏳️‍🌈为什么要使用云服务OSS

解决本地存储无法直接访问,本地磁盘空间有限,本地磁盘损坏这3个问题

🎄使用步骤

image

文件上传操作


🎈在pom文件中添加下面的代码

1
2
3
4
5
6
7
8
9
10
<properties>
<aliyun.sdk.oss>3.10.2</aliyun.sdk.oss>
</properties>

<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.sdk.oss}</version>
</dependency>

🎈本地存储的话 在yml中写明存储地方

1
2
3
ali:
spring:
localhost: D:\Program Files\Project\Test-Project\TEST01\alioosdemo\ali-service\src\main\resources\upload

🎈在Controller层进行上传操作

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
@RestController
@RequestMapping("/api/common")

public class CommonController {
@Value("${ali.spring.localhost}")
private String path;

@Autowired
private AliOssUtil aliOssUtil;
/**
* 文件上传
*/
@PostMapping("upload")
public String Upload(MultipartFile file) throws IOException {

//获取原始名
String originalFilename = file.getOriginalFilename();
//截取 .png
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
//构造一个新名称 使用Hutool工具类
String filename = IdUtil.simpleUUID() + substring;
//新建File对象 进行存储
File file1 = new File(filename);
try {
file.transferTo(file1);
} catch (IOException e) {
throw new RuntimeException(e);
}
return "上传成功";
}


}

文件上传操作(OSS版)

🎈Oss存储 在yml中写明存储地方 access-key-idaccess-key-secretbucket-name

1
2
3
4
5
6
7
ali:
alioos:
endpoint: oss-cn-beijing.aliyuncs.com
access-key-id: ***********
access-key-secret: ***********
bucket-name: ***********

使用@ConfigurationProperties注解读取 properties的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
*
*@Component 表示将该类标识为Bean
*@ConfigurationProperties(prefix = "ali.alioos")用于绑定属性,其中prefix表示所绑定的属性的前缀。
**/
@Component
@ConfigurationProperties(prefix = "ali.alioos")
@Data
public class AliOssProprtyies {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}

配置类,用于创建AliOssUtil对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14

@Configuration
public class OssConfiguration {

@Bean
@ConditionalOnMissingBean
public AliOssUtil aliOssUtil(AliOssProprtyies aliOssProprtyies){
return new AliOssUtil(aliOssProprtyies.getEndpoint(),
aliOssProprtyies.getAccessKeyId(),
aliOssProprtyies.getAccessKeySecret(),
aliOssProprtyies.getBucketName());
}
}

定义阿里云工具类

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
@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {

private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;

/**
* 文件上传
*
* @param bytes
* @param objectName
* @return
*/
public String upload(byte[] bytes, String objectName) {

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

try {
// 创建PutObject请求。
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}

//文件访问路径规则 https://BucketName.Endpoint/ObjectName
StringBuilder stringBuilder = new StringBuilder("https://");
stringBuilder
.append(bucketName)
.append(".")
.append(endpoint)
.append("/")
.append(objectName);

log.info("文件上传到:{}", stringBuilder.toString());

return stringBuilder.toString();
}
}

自定义上传接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

@Autowired
private AliOssUtil aliOssUtil;
/**
* 文件上传
*/

@PostMapping("upload")
public String Upload(MultipartFile file) throws IOException {

//获取原始名
String originalFilename = file.getOriginalFilename();
//截取 .png
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
//构造一个新名称
String filename = IdUtil.simpleUUID() + substring;


aliOssUtil.upload(file.getBytes(), filename);

return "上传成功";
}


image-20240716233536204

阿里云banner图

img

SrpingBoot

下载

图怪兽_模板

image-20240727123704425

image-20240727124045128

image-20240727124248853

image-20240727124343534

image-20240727124433786