文章目录
文件上传
页面要求
- 上传对表单限制
(1)method=“post”
(2)enctype=“multipart/form-data”
(3)表单中需要添加文件表单项:
<form action="xxx" method="post" enctype="multipart/form-data">
用户名;<input type="text" name="username"/><br/>
照 片:<input type="file" name="zhaoPian"/><br/>
<input type="submit" value="上传"/>
</form>
- 上传对Servlet限制
(1)request.getParametere(“xxx”);这个方法在表单为enctype="multipart/form-data"时,它无效,且永远都返回null
(2)ServletInputStream request.getInputStream();包含整个请求的体
多部件表单的体
- 每隔出多个部件,即一个表单项一个部件
- 一个部件中自己包含请求头和空行,以及请求体
- 普通表单项:
(1)1个头:Content-Disposition:包含name=“xxxx”,即表单项名称
(2)体就是表单项的值 - 文件表单项:
(1)2个头:
Content-Disposition:包含name=“xxxx”,即表单项名称;还有一个filename=“xxx”,表示上传文件的名称
Content-Type:它是上传文件的MIME类型,例如:image/pjpeg,表示上传的是图片,图上中jpg扩展名的图片
(2)体就是上传文件的内容
上传方法
1.需要资源
(1)jar包:
commons-fileupload
commons-fileupload.jar
commons-io.jar
它会解析request中的上传数据,将一个表单项数据封装到一个FileItem对象中
只需要调用FileItem的方法即可
(2)相关的类:
- 工厂:DiskFileItemFactory
- 解析器:ServletFileUpload
- 表单项:FileItem
2.上传步骤
(1)创建工厂:
DiskFileItemFactory factory = new DiskFileItemFactory();
(2)创建解析器:
ServletFileUpload sfu = new ServletFileUpload(factory);
(3)使用解析器来解析request,得到FileItem集合:
List<FileItem> fileItemList = sfu.parseRequest(request);
FileItem
FileItem是一个接口,它的实现类是DiskFileItem
主要方法:
boolean isFormField();//判断是否为普通表单项
String getFieldName();//返回当前表单项的名称
String getString(String charset);//返回表单项的值
String getName();//返回上传的文件名称
long getSize();