通过commons-fileupload实现文件上传

来源:互联网 发布:经传多盈软件 编辑:程序博客网 时间:2024/06/07 18:28

页面端执行文件上传时,表单的类型为enctype="multipart/form-data"。这时,浏览器发送请求时,将把文件数据附带在http请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。

当客户端想服务器端发送请求后,tomcat(本人用的tomcat)会将请求强转成HttpServletRequest对象。服务端处理,会从请求中获取数据(Request对象提供了一个getInputStream方法, 通过这个方法可以读取到客户端提交过来的数据)进行解析。分离出文本表达和上传文件。但由于用户可能会同时上传多个文件,在servlet端编程直接读取上传数据,并分别解析出相应的文件数据是一项非常麻烦的工作.

这里我使用了Apache开源的上传软件包。这个软件包,会将复杂表单元素看做一个FileItem对象。

 

采用默认临界值和系统临时文件夹构造文件项工厂对象。

DiskFileItemFactory factory = newDiskFileItemFactory();

factory.setSizeThreshold(1024*1024);//临界值

factory.setRepository(newFile(path,"upload"));//临时文件夹

采用参数指定临界值和系统临时文件夹构造文件项工厂对象。

public DiskFileItemFactory(intsizeThreshold,File repository)

ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象中。

ServletFileUpload upload = newServletFileUpload(factory);

解析request对象,并把表单中的每一个输入项包装成一个fileItem 对象,并返回一个保存了所有FileItem的list集合。

List<FileItem> list =(List<FileItem>)upload.parseRequest(request);

对list进行迭代,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件

String name = item.getFieldName();//获取表单的属性名字 字段名

if(item.isFormField()){//获取的表单信息是普通的文本信息

       //获取用户具体输入的字符串,名字起得挺好,因为表单提交过来的是字符串类型的

       Stringvalue = item.getString() ; //获取表单的属性值 字段值

}else{//为上传文件

       InputStreamis = item.getInputStream();//得到数据输入流

}

 

然后就是对流的读写操作了。

原创粉丝点击