文件上传fileupload文件接收
Posted 流年如水~烟雨随风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传fileupload文件接收相关的知识,希望对你有一定的参考价值。
form表单提交数据到servlet后,使用fileupload进行接收。
fileupload 是由 apache 的 commons 组件提供的上传组件。它最主要的工作就是帮我们解析 request.getInputStream()。
fileupload 组件需要的JAR包有:
commons-fileupload.jar,核心包;
commons-io.jar,依赖包。
fileupload 简单应用
fileupload的核心类有:DiskFileItemFactory、ServletFileUpload、FileItem。
使用 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
以上是关于文件上传fileupload文件接收的主要内容,如果未能解决你的问题,请参考以下文章
C#使用HTML文件中的file文件上传,用C#代码接收上传文件
ajaxfileupload.js上传文件时后台用java怎么接收文件流
如何使用lightning发送上传的文件到Apex:fileUpload - Salesforce lightning