文件上传三要素
1.表单提交方法:POST(get方式提交有大小限制,post没有)
2.表单的enctype属性:必须设置为 multipart/form-data
enctype就是encodetype就是编码类型的意思
multipart/form-data是多部件文件上传 , 指表单数据由多部分构成,既有文本数据,又有文 件等二进制数据的意思
3.表单必须有文件上传项:file ,必须要有name属性和值
注意: 默认情况下,表单的enctype的值是application/x-www-form-urlencoded,不能用于文件 上传,只有使用了multipart/form-data,才能完整的传递文件数据
服务端获上传的文件
1.通过request获取请求体的内容
2.解析请求体,多部件上传的特点是,每个input都是一个表单项。
根据分隔符将请求中所有的内容切割成数组,数组中的每一个元素都是一个表单项
3.遍历数组,根据filename 来判断哪个是普通的表单,哪个是文件上传项
4.获取到普通表单项中的内容,通过属性name获取
5.获取文件上传项内容
文件名
文件内容
6.使用IO将文件内容保存到服务器中
FileUpload工具类
1.导入依赖
FileUpload包可以很容易地将文件上传到Web应用程序
IOUtils封装了java中常见操作,使用十分方便
2. FileUpload 核心类介绍
DiskFileItemFactory:磁盘文件项工厂,读取文件时相关的配置,比如:缓存的大小,临时目录的位置
ServletFileUpload:文件上传的一个核心类
FileItem:代表每一个表单项
3. 文件上传的API的详解
ServletFileUpload
isMultipartContent(request); :判断是否是一个文件上传的表单
parseRequest(request); :解析request获得表单项的集合
setHeaderEncoding("utf-8") :设置上传的文件名的编码格式
FileItem
isFormField() :判断是否是普通表单项
getFiledName():获得表单的name属性
item.getString(): 获得表单的value值
getName() :获得上传文件的名称
getInputStream() :获得上传文件
delete() : 删除临时文件
4.文件上传后台代码编写
FileUpload使用步骤:
1.创建磁盘文件项工厂
2.创建文件上传的核心类
3.解析request——获得文件项集合
4.遍历文件项集合
5.判断普通表单项/文件上传项