文件上传的表单和普通表单相比的区别以及服务器的处理
普通表单
form:
enctype="application/x-www-form-urlencoded">
enctype底层是添加了一个Content-Type: application/x-www-form-urlencoded
作用是将参数放在消息体中以key=value形式传送
提交:
浏览器将表单数据封装成标准HTTP请求格式,发送到服务器。在这个过程中,参数被放在
请求消息体(F12) 以key=value&key1=value1&key2=value2的格式。
服务器:
接受请求,构造HttpServletRequest对象,setXX setHeader setParametr() setMethod setProtocol()
我们/servlet:
request.getMethod request.getPartameter() request.getHeader()
文件上传
form:
enctype底层是添加了一个Content-Type: multipart/form-data ;boundary=---adfafadfadf
作用是将参数放在消息体中以分隔符分割每一部分数据将文件数据二级进制 的形式传送到服务器
form表单的要点:1.method必须是post 2.enctype:multipart/form-data
提交:
浏览器将表单数据封装成标准HTTP请求格式,发送到服务器。在这个过程中,参数被放在
请求消息体(F12) 以分隔符分隔开。
服务器:
接受请求,构造HttpServletRequest对象, setHeader setMethod() setProtocol()
不会 setParameter() setInputStream();
我们/servlet:
request.getMethod request.getHeader() getProtocol()
无法使用request.getPartameter()方法
{通过getInputStream()获得请求的数据。根据header中的boundary,解析请求
中的每一部分,手动获得参数和文件数据。}
以上操作我们交给了第三方组件。如:smartupload、commons-fileupload。。。
我们 使用第三方组件,解析请求,从第三方组件中获得数据。{普通表单数据+文件数据}
new.
su.init..(ServletConfig,request,response);
//upload的意思是第三方组件接管并解析请求,放到 组件内部的对象中。
su.upload();
Request req = su.getRequest()
su.getFile