以文件形式存储附件:
- 优点:文件形式存储附件便于文件管理和检索,易于理解和处理。
- 缺点:文件形式存储附件可能会增加存储空间的需求,以及处理附件时可能需要额外的处理步骤。
以二进制形式存储附件:
- 优点:二进制形式存储附件可以提高存储和检索速度,降低存储空间的需求。
- 缺点:二进制形式存储附件可能会增加处理附件时的工作量,对附件进行处理可能需要特定的工具和库。
🌟文件上传
为确保文件上传在不同浏览器的兼容性,所以建议使用form表单
三需
- methods="post" 采用post方式提交数据
- enctype="multipart/form-data" 采用multipart格式上传文件
- type="file" 使用input的file控件上传
element中el-upload的底层也是input标签![]()
![]()
![]()
<input type="file">
size(文件大小)
单位:字节(byte),1KB等于 1024 字节,1MB等于 1024*1024个字节
文件上传介绍
文件上传都是基于流继续操作,服务器端要接收客户端页面上传的文件。通常使用Apache的两组件
- commons-fileupload
- commons-io
Spring框架对文件上传进行了封装,只需在controller方法中声明MultipartFile类型的参数即可接收上传的文件,其底层还是基于上方两Apache的两组件开发的
🥈前端代码
需要了解
底层实现代码
![]()
enctype:提交表单的内容类型,值设置为multipart/form-data
action: 后端上传的接口地址,一般设置为服务器地址+接口请求地址
文件上传必须是post请求
file名不能随意起
这里的file必须和前端表单数据中的name一致表单数据中的name="file"对应的是前端标签input中的name(element中默认名称为file)
<imput type="file" name="file" />
🥈后端代码
上传目录是否存在
//判断目录是否存在,不存在则创建该目录
File file1 = new File("D:\src\main\resources\backend\upload");
if (!file1.exists()) { //判断目录是否存在,存在为true
file1.mkdirs(); //创建目录
}
实践过程所出报错解决
中文乱码
解决报错之文章推荐
个人解决报错采用方法
向RequestMapping中添加produces属性,并设置其响应数据的类型为"application/json;charset=UTF-8"
🌟文件下载
前端可参考:blog.csdn.net/qq_44848480…
文件下载介绍
将文件从服务器传输到本地计算机的过程
表现形式:
1、以附件形式下载、弹出保存对话框、将文件保存在指定磁盘当中
2、直接在浏览器打开
通过浏览器进行文件下载,本质时服务器端将文件以流的形式写回浏览器的过程
后端代码
前端代码
注意: 不添加download="文件名" 时,下载附件会直接在浏览器中打开,添加后才可正常下载
困惑解析
下载附件时,会直接在浏览器打开,而不是下载文件本地
添加download,(i.name是文件名,传给后端所用)
普通流HttpServletRequest设置响应头之name值的选择
🌟文件移动
功能可参考:www.nhooo.com/note/qa063a…
主要应用了Files类中的move方法,接收两个绝对路径,不是端口+地址,是文件的绝对路径
知识彩蛋
什么时候用\ ,什么时候用/