SpringBoot整合——阿里云对象存储(OSS)
SpringBoot整合——阿里云对象存储
1 OSS介绍
在开发应用的过程中,我们经常会有用户需要实名认证之后才能访问的需求。
用户认证需要上传证件图片、首页轮播也需要上传图片,因此我们要做文件服务,阿里云oss是一个很好的分布式文件服务系统,所以我们只需要集成阿里云oss即可。
OSS本质上来说就是帮助我们存储图片、文件的一个地方。
2 项目集成阿里OSS
2.1 前置准备:账号服务开通
①申请阿里云账号
https://www.aliyun.com/?spm=5176.21213303.J_3207526240.1.4eb853c9FFk35J
②实名认证
③开通"对象存储OSS服务"
https://free.aliyun.com/product/storage/freetrial
④进入管理控制台
https://oss.console.aliyun.com/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-hangzhou.aliyuncs.com//填写自己的即可
aliyun.oss.accessKeyId=LTAI5t7md8W*****//填写自己的即可
aliyun.oss.secret=dcusDHFIXN8u*****//填写自己的即可
aliyun.oss.bucket=***//填写自己的即可
endpoint获取:
在之前测试过的上传文件中,查看URL详情
或者如果之前没有创建的话,新建一个Bucket
②配置类
读取配置文件内容
@Component
public 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+时间来避免此情况,大家可以根据自己的想法实现
@Service
public 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;//按照当前日期,创建文件夹,将文件上传到文件夹中 2022/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-beijing.aliyuncs.com/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
@EnableSwagger2
public 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", "http://zi.com", "493211102@qq.com")).build();}private ApiInfo adminApiInfo(){return new ApiInfoBuilder().title("后台管理系统-API文档").description("本文档描述了后台管理系统微服务接口定义").version("1.0").contact(new Contact("zi", "http://zi.com", "49321112@qq.com")).build();}
}
选择文件之后,点击try it out
查看阿里云控制台
至此,整合OSS成功
SpringBoot整合——阿里云对象存储(OSS)相关推荐
- springboot整合阿里云对象存储oss
知识梳理: 今天要学的知识很实用,一个合格的项目里面肯定会用到这个技术,那就是文件上传,文件上传可以帮我们上传头像.excel表格.等,用过文件上传的小伙伴都是文件上传到哪里去呢?本人第一次上传文件是 ...
- 阿里云对象存储OSS与文件存储NAS的区别
一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...
- 谷粒学苑项目实战(九):实现阿里云对象存储OSS功能
目录 一.开通阿里云对象存储OSS 二.创建bucket 三.创建操作阿里云OSS许可证 四.用代码实现头像上传功能 五.引入相关依赖 六.创建properties配置文件 七.创建主启动类 八.启动 ...
- 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客
如何利用阿里云对象存储OSS搭建自己图床写博客 1.购买阿里云 购买链接 登录阿里云–>控制台–>对象存储OSS–购买 购买的时候可以选择按月付费一月一元的,也可以年费9元的,40GB作为 ...
- 阿里云对象存储OSS支持版本管理特性
2019独角兽企业重金招聘Python工程师标准>>> 阿里云对象存储OSS现已经全面支持"对象版本管理"特性.该功能适用于所有的存储类型以及区域.当Bucket ...
- 开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。
一.背景 阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用.在使用过程中难免会遇到误操作.程序 Bug.覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况 ...
- 阿里云对象存储OSS存储照片
版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 概述 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可 ...
- 关于阿里云对象存储OSS流量包说明
阿里云对象存储OSS公网出方向流量是收费的,内网产生的流量或者公网入方向流量都是免费的,OSS流量计费方式分为按量付费和包年包月流量包两种计费模式,云吞铺子来详细说下阿里云对象存储OSS流量收费标准价 ...
- 阿里云对象存储OSS(Object Storage Service)
文章目录 简介 endpoint:阿里云服务部署的地区位置 见解 开发步骤 配置文件 utils层(读取全局配置文件并赋值给类变量) service层 impl(基于oss驱动sdk实现类) cont ...
最新文章
- C# 复制幻灯片(包括格式、背景、图片等)到同/另一个PPT文档
- 【机器学习入门笔记4:OpenCV图片的写入和不同图片质量保存】20190203
- ABAP 7.53 中的ABAP SQL(原Open SQL)新特性
- Apache应用实例:建立yum服务器
- 安装 SharePoint 2013 Foundation
- git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...
- 智能指针:-和*运算符重载 + 模板技术 实现智能指针(C++)
- zabbix使用zabbix-java-gateway监控jvm/tomcat性能
- 《电子元器件的可靠性》——第1章概述
- asp.net UpdatePanel 不能局部刷新问题汇总
- 读取swagger配置文件里的内容
- Swift - 触摸事件响应机制(UiView事件传递)
- Golang 接口相等比较注意要点
- Python进阶(一)Python中的内置函数、内置方法、私有属性和方法详解
- IT服务管理领域的最佳实践知识体系ITIL4
- 【SpringBoot系列】自动装配原理
- 商业智能BI的前景如何?看完这篇文章你就明白了
- 历时54年,完成了1574架飞机生产,“天空女王”波音747正式停产 | 美通社头条...
- empty()与isEmpty(),空判断
- android系统电视机排行榜,智能电视机排行榜前十名
热门文章
- 到底什么是索引???
- UVM 验证方法学之interface学习系列文章
- 第35课: 打通Spark系统运行内幕机制循环流程
- 某美颜app sig参数分析
- 自媒体怎么做视频搬运
- 打工人必学的法律知识(七)——《中华人民共和国劳动合同法实施条例》
- 什么是人群标签,旺旺号标签如何查询,淘宝号搜索标签查询,淘宝号的千人千面,买家行为标签透视,旺旺号标签API接口
- Excel表格无法重命名工作表
- c语言自己走时间的程序,c语言用哪些语句能实现时间暂停?比方说按某一个键使时间暂停,再按一次使时间继续。...
- Markdown还能这么玩?这款开源神器绝了!