上传文件满足条件:
(1)需要有个表单,表单里面有个input类型为file的上传域
(2)请求方法必须是POST
(3)表单需要添加enctype属性(Content-Type)multipart/form-data
告知服务器提交数据的MIME类型
enctype取值:
(1)application/x-www-form-urlencoded默认取值:普通表单提交类型。
就是通过URL编码的方法把表单数据传输给后端。这样我们的Servlet可以直接获取参数
request.getParamter(name)
缺点:无法传输二进制文件,例如:图片、视频。
(2)multipart/form-data
上传文件类型,传输的数据以boundary进行分割,以---${boundary}开始
以${boundary}---结尾
java中解析文件上传数据的库,常见的FileUpload库(Spring中默认的上传库)、SmartUpload
FileUpload实现表单文件上传:
使用FileUpload实现上传,是第三方库由appache的commons提供的上传组件,主要是帮我们解析req.getInputStream()中前端传过来的参数和上传的文件
因为是第三方库,所以需要引入响应的jar
![](https://i-blog.csdnimg.cn/blog_migrate/9d26a0f5a8a96d8652036191ba08f16d.png)
FileUpload的核心类
DiskFileItemFactory、ServletFileUpload、FileItem
使用步骤
① 创建工厂类DiskFileItemFactory对象
② 使用工厂创建ServletFileUpload 解析器对象
③ 使用解析器来解析request对象
使用表单上传代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/487a79e45f28d13005ca3a3ec6701a7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/73732c8c2d07d531d34c9f381d0cb6e9.png)
使用ajax上传代码如下(只是前端发生变化,后端请求的接口是一致的):
![](https://i-blog.csdnimg.cn/blog_migrate/6395636229742b510ca1ece88e344a03.png)