1、文件上传
响应方式可向服务器上传文本数据,但比较麻烦,而且无法上传图片资源。如果文件数据比较大,或非文本数据,一般使用文件上传。
文件上传就是将客户端资源通过网络传递给服务器,其本质就是IO流的操作,客户端发送数据流,服务端通过流读取数据,对数据进行解析得到上传文件的内容,然后保存在服务器端。
2、数据处理
2.1客户端
(1)、使用post方法(method=“post”),因提交的数据会比较大;
(2)、必须使用name属性;
(3)、在input标签中设置encType属性,如encType=”Multipart/form-data”。
2.2服务器端
(1)、用request对象获取请求信息。
(2)、通过request的getInputStream()方法,可以读取到所有请求正文消息。
(3)、操作IO流,将所需要的信息保存在服务器端。
3、commons-fileupload.jar包
commons-fileupload.jar通常和commons-io.jar包一起使用的。用来操作文件上传。该包封装了很多上传的功能,简化了上传代码的复杂性,其核心类如下:
3.1 DiskFileItemFactory类
DiskFileItemFactory类用于设置文件缓冲区大小以及临时保存位置;
setSizeThreshold( int sizeThreshold )用于设置缓冲区大小,如果不设置,sizeThreshold大小为:10240(10KB);
setRepository( File repository );用于设置临时文件的保存位置,如果不设置,repository为系统的临时目录;
DiskFileItemFactory()用于构造一个缓冲区大小为sizeThreshold和临时文件为目录为repository的文件项工厂;
DiskFileItemFactory( int SizeThreshold , File repository )用于构造一个带指定参数的文件项工厂类。
3.2 ServletFileUpload类
ServletFileUpload类实现上传的一些程序集合;
ServletFileUpload( DiskFileItemFactory factory )构造函数,使用factory指定的缓冲区大小和临时文件。
public List<FileItem> parseRequest ( HttpSevletRequest request )解析request对象,得到所有的上传项,返回一个List<FIleItem>集合,其中每个FileItem就相当于一个上传项;
boolean isMultipartContext ( HttpServletRequest request )用于判断是否为上传项,如果是就返回true;
setFileSizeMax(long fileSizeMax)设置单个文件的上传的大小上限;
setSizeMax(long sizeMax)设置总文件上传的大小上限。
setHeaderEncoding( Charset charset)使用charset的编码进行请求进行处理,可以解决文件上传中的中文乱码的问题。
3.3FileItem类
isFormField()用于判断是否为上传组件;
String getFieldName()用于获取组件的名称,即<input>标签中的name属性。
String getName()获取上传文件中的名称,浏览器不同,得到的结果可能不一同
getString()和getString(Charset charset) 用于获取非上传组件的内容,两者的区别是一个使用默认编码,一个使用指定编码;
getInputStream()用于获取上传文件内容的输入流,使用文件复制就能完成文件的上传。
delete()用于删除临时文件。
commons-fileupload.jar文件上传基础知识
最新推荐文章于 2024-05-09 16:57:09 发布