文件上传和下载的原理

文件上传
从浏览器上传文件的时候需要对文件进行限制
这个限制是在配置文件里面配置
一以下是SpringMVC的配置方式(后续使用springboot的时候会比这个简单)

文件上传的实现
1.文件上传的依赖

2.上传单个文件
- 表单的实现
![image]()
- 添加action 找到对应的接口
![image]()
- 如果是提交文件那么表单的请求方式是post因为post方式没有大小限制
![image]()
- 前端上传是默认以字符串方式传递的,而我们的文件是字节,不是字符串,所以此时需要指定以字节的方式上传
![image]()
- 接口的实现
文件被封装在MultipartFile里面
![image]()
- 此时后端确实已经接收到了文件
![image]()
- 此时将后端接收到的文件保存到磁盘
![image]()
![image]()
- 处理异常!如果没有上传文件就不做IO
![image]()
- 异常处理:防止用户篡改页面,所以判断文件是否存在

- 文件异常:如果上传的文件名是相同的话怎么办?==》此时将文件名改为随机数或者是时间相关的东西
![image]()
- 文件异常:万一文件没有后缀怎么办呢???此时截取不了文件后缀。所以在上传文件的时候保证文件要有一个“点”==》“.”
![image]()
3.上传多个文件:加一个multiple
- 表单的实现
![image]()
- 接口实现
刚才上传单个文件的时候是使用一个对象接收,所以现在使用数组接收就OK了,其他逻辑基本和上面的一样。
所以就只是加一个数组+遍历
![image]()
- 问题:万一数组为空?(由前端没有key导致)
![image]()
- 问题:一个文件没提交
![image]()














