前言
本章主要介绍项目中配置阿里云OSS对象存储以及过程中的一些问题。
个人对OSS对象存储的理解
OSS对象存储中有几个比较关键的名词和参数,比如对象Object,存储空间Bucket,访问域名endpoint以及访问秘钥accessKey。个人理解的话,OSS对象存储是将数据以对象的方式存储在一个容器中,通过特定的访问秘钥从访问域名中读取自己想要的数据,而使用这种方式访问数据优点就是可以减少我们项目的负载,因为数据交给了OSS存储,项目中只需要一个地址便可以访问到,其次就是较为安全,将图片或是视频存在项目很容易被访问者窃取,而存在OSS中,我们可以通过设置防盗链或是设置访问范围的的方式,防止他人剽窃资源。
为什么在项目中使用对象存储
其实最大的原因在于视频播放问题,在前端的头部对方要求视频能够自动播放,而使用自动播放就会导致一个问题,视频无法边缓存边播放,那么就意味着页面刚加载出来后视频可能无法第一时间自动播放,影响用户体验,这是项目采用对象存储的最大原因。
开通OSS服务
使用的是阿里云OSS,由于对方是一个海外公司,于是就在阿里云国际站中购买了美国的OSS服务。在进入阿里云官网后找到对象存储OSS并点击开通,随即进入控制台,创建一个Bucket,可以理解为是数据库中的一张表,因为它就是键值对的存储方式:

创建好之后,有几个参数需要我们记住,待会需要使用,首先是我们的Bucket名,其次点击我们创建的Bucket,点击概览,看到访问域名这边,记住Endpoint地域节点中的值。

以及在控制台左边点击概览后,进入主面板,右侧有一个不起眼的Access key选项:

点进去如图:
记录下其中的AccessKey ID以及AccessKey Secret值。

关于访问权限的问题
若想外部能够访问到该Bucket,那么就需要开放权限,在bucket的左侧菜单中就有该选项:

一般我们将读写权设置为公共读即可,此权限下所有人都能够访问到该bucket中的文件,但仅仅这样设置也会导致一个问题,就是流量损耗较大,或者是一些我们并不想流出去的资源被他人轻易使用,那么针对此问题我们还可以设置防盗链:

给定了防盗链后,我们的项目中涉及到bucket中的资源读取时,就需要在标签中加入我们在上面设置的防盗链referer,否则将会无法访问,这样也就起到了防盗作用。
在项目中配置阿里云OSS环境
Guns框架本身其实是集成了阿里云OSS,但并不完整,首先是jar的问题,可能是我操作不正确,在pom中引入阿里云的OSS始终是报红。于是我采用了从本地导入jar的方式,在阿里云OSS的官网下载下来的相关压缩包中有许多文件,而官方文档告诉我只需要引入主要文件以及lib文件夹中的jar即可,也就是这些:

由于我们在此处导入了本地的jar,maven编译时若不进行处理就会报错,导出项目时也无法将导入的jar导出,所以在pom中需要做以下配置:
首先在build节点中新增configuration节点,若已经存在则不用创建,然后在configuration增添true
节点,意思是让maven编译时包含系统中的jar,其次就和平时引入依赖一样的操作了,稍有不同的是还需加入两个节点scope以及systemPath:

其中systemPath 中的路径是根据你jar放置在项目的路径配置的。这样就能够正常使用了。
编写阿里云OSS工具类
这一工具类用于我们配置一系列连接参数,以及上传下载等功能,这里就得用到上面我们记下来的四个参数了,这里我声明了4个静态常量分别存储那四个参数:

由于项目不需要下载功能,接下来也就只写了上传功能,涉及到私有问题就不详细展示了,提几个主要的点:
首先是需要创建一个OSS对象:

不难看出build方法中需要提供三个参数,也就是我们之前记住的,当这三个参数正确时我们才能成功执行上传或是下载功能。
其次我们可以在代码中完成创建bucket的功能:

以及上传调用的方法:

三个参数分别为我们需要传入的bucket名,以及文件上传到bucket中的哪个路径(在bucket中我们是可以自由增添目录的),以及最后我们需要传入的文件,注意这里传入的是File类型的。
同样我们也可以在代码中设置Bucket的访问权限:

最后操作完成后记得关闭连接,有点类似jdbc操作完成后关闭连接:

控制层接收到文件后调用工具类上传
前端在上传文件到控制层后,控制层调用上面的工具类将文件上传至OSS(之前这个方法是用来处理tinymce富文本编辑器上传文件的,所以名字就懒得改了。。。):

这里用到的是RequestPart注解+MultipartFile的方式进行文件上传,这里就涉及到了一个使用@RequestPart与@RequestParam的区别,最直观的表现就是@RequestPart支持MultipartFile的请求方式,而@RequestParam不支持,其次是@RequestPart能够自动地将前端发送来的json数据转换为对象,而@RequestParam只能转换为字符串。当然还有许多其他的区别,在网上搜集资料也有血多大佬给了解释,取其中一篇个人觉得比较完善的贴在此处:
https://blog.youkuaiyun.com/u012894692/article/details/115875674?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242
接下来上控制层上传逻辑代码:

比较简单的逻辑,首先是获取到上传的文件名,其次将前端获取到的MultipartFile文件转换为File类型,再上传至OSS,在这里存在一个小问题,就是上传的同时还会在本地生成一个相同的文件,网上说是因为@RequestPart注解的原因,于是在上传方法执行完后,我又加了两行代码用于删除本地生成的文件,最后将结果返回至前台。至此上传功能结束。
本文详细介绍了如何在项目中配置阿里云OSS对象存储,包括开通服务、设置访问权限、配置环境及编写工具类。重点讨论了对象存储的优势,如减少项目负载和提高安全性。此外,还探讨了访问权限设置,包括公共读权限和防盗链策略,以保护资源不被滥用。
3614

被折叠的 条评论
为什么被折叠?



