3.配置阿里云OSS

本文详细介绍了如何在项目中配置阿里云OSS对象存储,包括开通服务、设置访问权限、配置环境及编写工具类。重点讨论了对象存储的优势,如减少项目负载和提高安全性。此外,还探讨了访问权限设置,包括公共读权限和防盗链策略,以保护资源不被滥用。

前言

本章主要介绍项目中配置阿里云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注解的原因,于是在上传方法执行完后,我又加了两行代码用于删除本地生成的文件,最后将结果返回至前台。至此上传功能结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值