1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > SpringBoot整合——阿里云对象存储(OSS)

SpringBoot整合——阿里云对象存储(OSS)

时间:2019-04-23 06:47:15

相关推荐

SpringBoot整合——阿里云对象存储(OSS)

SpringBoot整合——阿里云对象存储

1 OSS介绍

在开发应用的过程中,我们经常会有用户需要实名认证之后才能访问的需求。

用户认证需要上传证件图片、首页轮播也需要上传图片,因此我们要做文件服务,阿里云oss是一个很好的分布式文件服务系统,所以我们只需要集成阿里云oss即可。

OSS本质上来说就是帮助我们存储图片、文件的一个地方。

2 项目集成阿里OSS

2.1 前置准备:账号服务开通

①申请阿里云账号

/?spm=5176.21213303.J_3207526240.1.4eb853c9FFk35J

②实名认证

③开通"对象存储OSS服务"

/product/storage/freetrial

④进入管理控制台

https://oss./bucket

新用户免费体验三个月OSS

测试:手动上传文件

创建自己的bucket

因为这里只是为了演示,所以我好多功能没有开通,大家在使用OSS服务时候,可以根据自己业务场景需要来开通

开通之后,选择文件列表,测试手动上传文件

选择上传文件,然后选择扫描文件,选择好文件或图片之后,点击上传

上传完成之后,点击文件列表,可以看到文件已经上传成功,点击详情可以查看文件访问地址

将url复制下来,然后在新的浏览器打开,可以发现成功访问

2.2 SpringBoot项目集成OSS

官方文档

2.2.1 获取到AccessKey与Secret

①来到自己的工作台,将鼠标停留在头像上,选择AccessKey管理

②查看自己的AccessKey,如果没有就创建一个

③点击查看Secret

2.2.2 编写配置文件、配置类

①配置文件

application.properties:

# 阿里云oss配置aliyun.oss.endpoint=oss-cn-//填写自己的即可aliyun.oss.accessKeyId=LTAI5t7md8W*****//填写自己的即可aliyun.oss.secret=dcusDHFIXN8u*****//填写自己的即可aliyun.oss.bucket=***//填写自己的即可

endpoint获取:

在之前测试过的上传文件中,查看URL详情

或者如果之前没有创建的话,新建一个Bucket

②配置类

读取配置文件内容

@Componentpublic class ConstantOssPropertiesUtils implements InitializingBean {@Value("${aliyun.oss.endpoint}")private String endpoint;@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;@Value("${aliyun.oss.secret}")private String secret;@Value("${aliyun.oss.bucket}")private String bucket;public static String ENDPOINT;public static String ACCESS_KEY_ID;public static String SERECT;public static String BUCKET;@Overridepublic void afterPropertiesSet() throws Exception {ENDPOINT=endpoint;ACCESS_KEY_ID=accessKeyId;SERECT=secret;BUCKET=bucket;}}

2.2.3 创建service与serviceImpl

service接口:

public interface FileService {/*** 上传文件到阿里云* @param file* @return*/String upload(MultipartFile file);}

serviceImpl:

注意:为了防止上传的不同文件重名,此处我采用了UUID+时间来避免此情况,大家可以根据自己的想法实现

@Servicepublic class FileServiceImpl implements FileService {//上传文件到阿里云@Overridepublic String upload(MultipartFile file) {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = ConstantOssPropertiesUtils.ENDPOINT;String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;String accessKeySecret = ConstantOssPropertiesUtils.SERECT;String bucketName = ConstantOssPropertiesUtils.BUCKET;try{//创建OSS实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//上传文件流InputStream inputStream = file.getInputStream();String fileName = file.getOriginalFilename();//为了防止不同的文件因为有相同文件名而导致前一个文件被覆盖,将uuid添加到文件名中String uuid = UUID.randomUUID().toString().replaceAll("-", "");fileName = uuid + fileName;//按照当前日期,创建文件夹,将文件上传到文件夹中 /10/22/01.jpg//导入joda工具类处理时间【当然也可以使用SimpleDateFormat】String timeUrl = new DateTime().toString("yyyy/MM/dd");fileName = timeUrl + "/" + fileName;//调用方法实现上传ossClient.putObject(bucketName, fileName, inputStream);//关闭ossClientossClient.shutdown();//上传之后的文件路径https://yygh-zi.oss-cn-/01.jpgString url = "https://" + bucketName + "." + endpoint + "/" + fileName;//返回urlreturn url;} catch (IOException e) {e.printStackTrace();}// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);return null;}}

2.2.4 编写controller调用

@RestController@RequestMapping("/api/oss/file")public class FileApiController {@Autowiredprivate FileService fileService;//上传文件到阿里云oss@PostMapping("fileUpload")public Result fileUpload(MultipartFile file) {//获取上传文件String url = fileService.upload(file);return Result.ok(url);}}

2.2.5 测试

此处因为我的项目整合了Swagger,所以我直接使用swagger来测试

想要整合Swagger的,可以参考下面的配置类

@Configuration@EnableSwagger2public class Swagger2Config {@Beanpublic Docket webApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName("webApi").apiInfo(webApiInfo()).select()//只显示api路径下的页面.paths(Predicates.and(PathSelectors.regex("/api/.*"))).build();}@Beanpublic Docket adminApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName("adminApi").apiInfo(adminApiInfo()).select()//只显示admin路径下的页面.paths(Predicates.and(PathSelectors.regex("/admin/.*"))).build();}private ApiInfo webApiInfo(){return new ApiInfoBuilder().title("网站-API文档").description("本文档描述了网站微服务接口定义").version("1.0").contact(new Contact("zi", "", "493211102@")).build();}private ApiInfo adminApiInfo(){return new ApiInfoBuilder().title("后台管理系统-API文档").description("本文档描述了后台管理系统微服务接口定义").version("1.0").contact(new Contact("zi", "", "49321112@")).build();}}

选择文件之后,点击try it out

查看阿里云控制台

至此,整合OSS成功

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。