SpringBoot集成阿里云OSS实现图片存储服务
- 1、OSS概述
- 2、账号申请
- 2.1 购买服务
- 2.2 创建Bucket
- 3、抽取模板工具
- OssProperties配置类
- OssTemplate模板对象
- AutoConfiguration配置类
- yml配置内容
- 4、测试
阿里云OSS(Object Storage Service)是一种强大的云存储服务,可用于存储和管理大量的静态文件如图片、视频、音频等。Spring Boot与阿里云OSS集成,实现图片上传存储服务,具有以下场景和意义:
-
分布式存储:使用阿里云OSS可以将图片等静态资源存储在云端,实现分布式的存储和管理。这样可以提高数据的可用性和可靠性,减少单点故障的风险,确保应用程序在面对高并发访问时能够快速响应。
-
弹性扩展:阿里云OSS具备强大的扩展性,能够根据业务需求自动扩展存储容量和吞吐量。当应用程序的用户量增加,需要处理更多的图片上传请求时,可以依靠阿里云OSS的弹性扩展能力,无需担心系统性能的瓶颈问题。
-
安全性保障:阿里云OSS提供了多种安全机制,如身份验证、权限管理等,可以控制用户对存储在OSS上的图片的访问权限。通过集成Spring Security等安全框架,可以实现对上传图片的访问控制和权限管理,确保只有授权的用户才能访问和下载图片。
-
资源代理和加速:通过OSS的CDN(Content Delivery Network)特性,可以将存储在OSS上的图片缓存到全球各地的节点上,加速图片的传输和加载速度。这样可以提升用户访问图片的体验,减少网络延迟带来的等待时间,提高应用程序的性能。
-
成本效益:使用阿里云OSS可以将存储和处理大量图片的成本转移给云服务提供商。OSS提供了灵活的计费方式,按照存储容量和网络流量进行计费,让开发者可以根据实际需求进行成本控制,并避免过度投入到硬件设备和维护上。
本文实现流程:
1、OSS概述
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
地址:https://www.aliyun.com/product/oss
2、账号申请
2.1 购买服务
如何购买开通服务。
购买下行流量包:(不购买也可以使用,按照流量付费)
说明:OSS的上行流量是免费的,但是下行流量是需要购买的。
2.2 创建Bucket
使用OSS,首先需要创建Bucket,Bucket翻译成中文是水桶的意思,把存储的图片资源看做是水,想要盛水必须得有桶。进入控制台,https://oss.console.aliyun.com/overview
选择Bucket后,即可看到对应的信息,如:url、消耗流量等 :
文件管理:
查看文件:
3、抽取模板工具
阿里云OSS采用自定义工具的形式进行封装
OssProperties配置类
@Data
@ConfigurationProperties(prefix = "tanhua.oss")
public class OssProperties {
private String accessKey;
private String secret;
private String bucketName;
private String url; //域名
private String endpoint;
}
OssTemplate模板对象
package com.tanhua.autoconfig.template;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.tanhua.autoconfig.properties.OssProperties;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
public class OssTemplate {
private OssProperties properties;
public OssTemplate(OssProperties properties) {
this.properties = properties;
}
public String upload(String filename, InputStream is) {
// 拼写图片路径
filename = new SimpleDateFormat("yyyy/MM/dd").format(new Date())
+"/"+ UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = properties.getEndpoint();
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = properties.getAccessKey();
String accessKeySecret = properties.getSecret();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
ossClient.putObject(properties.getBucketName(), filename, is);
// 关闭OSSClient。
ossClient.shutdown();
String url = properties.getUrl() +"/" + filename;
return url;
}
}
AutoConfiguration配置类
@EnableConfigurationProperties({
OssProperties.class
})
public class AutoConfiguration {
@Bean
public OssTemplate ossTemplate(OssProperties properties) {
return new OssTemplate(properties);
}
}
yml配置内容
tanhua: # 都换成自己的
oss:
accessKey: LTAI4GKgob9vZ53k2SZdyAC7
secret: LHLBvXmILRoyw0niRSBuXBZewQ30la
endpoint: oss-cn-beijing.aliyuncs.com
bucketName: tanhua001
url: https://tanhua001.oss-cn-beijing.aliyuncs.com/
4、测试
编写测试类OssTest
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppServerApplication.class)
public class OssTest {
@Autowired
private OssTemplate template;
@Test
public void testTemplateUpload() throws FileNotFoundException {
String path = "填自己的";
FileInputStream inputStream = new FileInputStream(new File(path));
String imageUrl = template.upload(path, inputStream);
System.out.println(imageUrl);
}
}
测试成功:
putStream = new FileInputStream(new File(path));
String imageUrl = template.upload(path, inputStream);
System.out.println(imageUrl);
}
}
测试成功:
![image-20230620091938050](https://img-blog.csdnimg.cn/img_convert/19d705a73cff538552695d9b0d4c5b1c.png)