SpringBoot文件上传与校验
一、简介
1、概述
文件上传是Web项目的一个基本功能,一般是通过上传文件的后缀名进行格式校验,但是由于文件的后缀是可以手动更改的,黑客可以通过修改后缀名入侵文件服务器,因此后缀名校验不是一种严格有效的文件校验方式。如果想要对上传文件进行严格的格式校验,则需要通过文件头进行校验,即魔数,文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分,其作用就是为了描述一个文件的一些重要的属性,其可以作为是一类特定文件的标识。
2、环境与技术介绍
SpringBoot2.5.6,AOP思想
使用切面编程,在文件上传之前,通过自定义注解首先进行自定义文件类型判断,若判断不通过,则通过全全局自定义异常返回,通过所有检查后才进行文件的上传,同时通过ConditionalOnProperty
注解可以在application.yml
中进行注解文件的打开或关闭,即校验文件功能的开启与关闭。
3、简单的文件上传
1 | "${file.staticPath}") ( |
yml中进行配置
1 | file: |
二、文件校验与上传实战
1、 前提准备
2、 文件枚举类
包含了每种文件的后缀名与头部魔数
1 | /** |
3、 自定义文件校验注解
1 | /** |
4、 文件校验切面
1 | /** |
5、 文件上传工具类
1 | /** |
6、 控制类
这里提供了一个视频上传接口和多图片上传接口
1 | /** |
7、 配置文件
在application.yml
进行配置
1 | spring: |
8、 文件的前端显示
一种是Nginx进行映射,这种方式比较常见;另一种是SpringBoot自带的映射穿透,需要在application配置好映射关系,或者在java里配置好映射关系。
若视频放在D:\social\
文件夹下,最终资源访问路径http://ip:port/social/xxxx
Yml配置文件方式
1 | spring: |
javaBean配置方式
1 | /** |
三、阿里云OSS文件上传
1、 阿里云oss配置
首先开通阿里云oss,选择公共读,这样别人才可以读到我们的文件,但这样可能会导致上行流量剧增
创建玩Bucket后,需要配置一下ssl证书和已备案自定义域名,否则浏览器只能下载,不能读
最后获取AccessKey和SecretKey。进入 AccessKey管理 ,进入之后选择开始使用子用户AccessKey(推荐,这样安全),创建子用户,选择openAPI访问,创建完成后,添加AliyunOSSFullAccess权限
2、 Java整合oss
下面简单说一下配置,首先配置maven
1 | <dependency> |
创建上传方法
1 | public static String uploadFile(MultipartFile multipartFile) { |
3、 注意事项
使用 OSS 默认域名访问 html、图片资源,会有以附件形式下载的情况。若需要浏览器直接访问,需使用自定义域名进行访问,同时保证已经配置好ssl证书;同时oss桶还可以用来做图床
其他请参考官方文档
参考文献:
https://www.jianshu.com/p/be3f4c26c39a
https://www.cnblogs.com/zys2019/p/15394599.html
https://www.bilibili.com/video/BV1C3411b7wt?p=15&spm_id_from=pageDriver