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

测试:手动上传文件

  1. 创建自己的bucket

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

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

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

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

  4. 将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)相关推荐

  1. springboot整合阿里云对象存储oss

    知识梳理: 今天要学的知识很实用,一个合格的项目里面肯定会用到这个技术,那就是文件上传,文件上传可以帮我们上传头像.excel表格.等,用过文件上传的小伙伴都是文件上传到哪里去呢?本人第一次上传文件是 ...

  2. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  3. 谷粒学苑项目实战(九):实现阿里云对象存储OSS功能

    目录 一.开通阿里云对象存储OSS 二.创建bucket 三.创建操作阿里云OSS许可证 四.用代码实现头像上传功能 五.引入相关依赖 六.创建properties配置文件 七.创建主启动类 八.启动 ...

  4. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客

    如何利用阿里云对象存储OSS搭建自己图床写博客 1.购买阿里云 购买链接 登录阿里云–>控制台–>对象存储OSS–购买 购买的时候可以选择按月付费一月一元的,也可以年费9元的,40GB作为 ...

  5. 阿里云对象存储OSS支持版本管理特性

    2019独角兽企业重金招聘Python工程师标准>>> 阿里云对象存储OSS现已经全面支持"对象版本管理"特性.该功能适用于所有的存储类型以及区域.当Bucket ...

  6. 开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。

    一.背景 阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用.在使用过程中难免会遇到误操作.程序 Bug.覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况 ...

  7. 阿里云对象存储OSS存储照片

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 概述 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可 ...

  8. 关于阿里云对象存储OSS流量包说明

    阿里云对象存储OSS公网出方向流量是收费的,内网产生的流量或者公网入方向流量都是免费的,OSS流量计费方式分为按量付费和包年包月流量包两种计费模式,云吞铺子来详细说下阿里云对象存储OSS流量收费标准价 ...

  9. 阿里云对象存储OSS(Object Storage Service)

    文章目录 简介 endpoint:阿里云服务部署的地区位置 见解 开发步骤 配置文件 utils层(读取全局配置文件并赋值给类变量) service层 impl(基于oss驱动sdk实现类) cont ...

最新文章

  1. C# 复制幻灯片(包括格式、背景、图片等)到同/另一个PPT文档
  2. 【机器学习入门笔记4:OpenCV图片的写入和不同图片质量保存】20190203
  3. ABAP 7.53 中的ABAP SQL(原Open SQL)新特性
  4. Apache应用实例:建立yum服务器
  5. 安装 SharePoint 2013 Foundation
  6. git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...
  7. 智能指针:-和*运算符重载 + 模板技术 实现智能指针(C++)
  8. zabbix使用zabbix-java-gateway监控jvm/tomcat性能
  9. 《电子元器件的可靠性》——第1章概述
  10. asp.net UpdatePanel 不能局部刷新问题汇总
  11. 读取swagger配置文件里的内容
  12. Swift - 触摸事件响应机制(UiView事件传递)
  13. Golang 接口相等比较注意要点
  14. Python进阶(一)Python中的内置函数、内置方法、私有属性和方法详解
  15. IT服务管理领域的最佳实践知识体系ITIL4
  16. 【SpringBoot系列】自动装配原理
  17. 商业智能BI的前景如何?看完这篇文章你就明白了
  18. 历时54年,完成了1574架飞机生产,“天空女王”波音747正式停产 | 美通社头条...
  19. empty()与isEmpty(),空判断
  20. android系统电视机排行榜,智能电视机排行榜前十名

热门文章

  1. 到底什么是索引???
  2. UVM 验证方法学之interface学习系列文章
  3. 第35课: 打通Spark系统运行内幕机制循环流程
  4. 某美颜app sig参数分析
  5. 自媒体怎么做视频搬运
  6. 打工人必学的法律知识(七)——《中华人民共和国劳动合同法实施条例》
  7. 什么是人群标签,旺旺号标签如何查询,淘宝号搜索标签查询,淘宝号的千人千面,买家行为标签透视,旺旺号标签API接口
  8. Excel表格无法重命名工作表
  9. c语言自己走时间的程序,c语言用哪些语句能实现时间暂停?比方说按某一个键使时间暂停,再按一次使时间继续。...
  10. Markdown还能这么玩?这款开源神器绝了!