文件上传fileupload文件接收

form表单提交数据到servlet后,使用fileupload进行接收。

fileupload 是由 apache 的 commons 组件提供的上传组件。它最主要的工作就是帮我们解析 request.getInputStream()。

fileupload 组件需要的JAR包有:

commons-fileupload.jar,核心包;

commons-io.jar,依赖包。

fileupload 简单应用

fileupload的核心类有:DiskFileItemFactoryServletFileUploadFileItem

使用 fileupload 组件的步骤

1. 创建工厂类 DiskFileItemFactory 对象:DiskFileItemFactory factory = new DiskFileItemFactory()

2. 使用工厂创建解析器对象:ServletFileUpload fileUpload = new ServletFileUpload(factory)

3. 使用解析器来解析 request 对象:List<FileItem> list = fileUpload.parseRequest(request)

隆重介绍 FileItem 类,它才是我们最终要的结果。一个FileItem对象对应一个表单项(表单字段)。

一个表单中存在文件字段和普通字段,可以使用FileItem类的 isFormField()方法来判断表单字段是否为普通字段,如果不是普通字段,那么就是文件字段了。

主要方法:

String getName():获取字段的文件名称(原始文件名),普通字段值为null,文件字段为文件的名称;
String getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件,如果是普通字段,获得字段的值;
String getFieldName():获取字段名称,例如:<input type="test" name="username"/>,返回的是username;
String getContentType():获取上传的文件的类型,例如:text/plain,如果是普通字段,值为null;
long getSize():获取字段的大小,单位:byte;
boolean isFormField():判断当前表单是否为普通文本字段,如果返回true,说明是普通字段,如果返回false,说明是文件字段;
InputStream getInputStream():获取上传文件对应的输入流,普通字段返回null;
void write(File):把上传的文件保存到指定文件中。

api链接:http://commons.apache.org/proper/commons-fileupload/javadocs/api-release/index.html

示例代码:

 1         //创建接收文件的工厂类
 2         DiskFileItemFactory factory = new DiskFileItemFactory();
 3         //创建文件解析对象
 4         ServletFileUpload sfu = new ServletFileUpload(factory);
 5         try {
 6             //解析request获得表单中的每一文件项(包含普通文本域)
 7             List<FileItem> fiList = sfu.parseRequest(request);
 8             //遍历每一个文本项
 9             for(FileItem fi : fiList){
10                 //获得原始文件名
11                 String originalFilename = fi.getName();
12                 //获得字段的内容
13                 //Returns the contents of the file item as a String, using the default character encoding.
14                 String content = fi.getString();
15                 //获得字段名
16                 String field = fi.getFieldName();
17                 //获得字段的内容类型
18                 String contentType = fi.getContentType();
19                 //获得字段大小,以byte为单位
20                 long size = fi.getSize();
21                 //是否是普通字段
22                 //如果true,代表普通字段(a simple form field)
23                 //如果false,代表文件字段
24                 boolean isFormField = fi.isFormField();
25                 System.out.println("原始文件名:" + originalFilename);
26                 System.out.println("字段的内容:" + content);
27                 System.out.println("字段名:" + field);
28                 System.out.println("字段的内容类型:" + contentType);
29                 System.out.println("字段大小(单位:byte):" + size);
30                 System.out.println("是否是普通字段:" + isFormField);
31                 System.out.println("============================");
32             }
33         } catch (FileUploadException e) {
34             e.printStackTrace();
35         }

附上fileupload 的下载路径:https://pan.baidu.com/s/1kUSBAPx

密码:p4fj

原文地址:https://www.cnblogs.com/ShawnYang/p/7645494.html