Apache Commons FileUpload 实现文件上传
Commons FileUpload简介
Apache Commons是一个专注于可重用Java组件开发的 Apache 项目。Apache Commons项目由三个部分组成:
1、Commons Proper - 可重用Java组件的存储库。
2、The Commons Sandbox - 用于Java组件开发的工作区。
3、The Commons Dormant - 当前不活动的组件存储库。
Commons-FileUpload是Commons Proper中的一个组件,该组件依赖于Commons-IO ,Commons-IO也是 Commons Proper中的一个组件。
前端文件上传页面
文件上传注意事项
FileUpload能解析符合HTML中基于表单的文件上载的HTTP请求 。也就是说,如果使用POST方法提交HTTP请求,并且内容类型为“multipart / form-data”,则FileUpload可以解析该请求,并使结果易于使用。
1、只能使用POST请求,GET请求只能提交普通的字符串(这是HTTP协议规定!)
2、form表单的文件控件是type="file"的input控件。
3、form标签的enctype属性是用来规定在发送表单数据之前如何对其进行编码,必须设置为:multipart/form-data。
enctype属性
enctype属性可能的值:application/x-www-form-urlencoded | multipart/form-data | text/plain。
enctype属性默认值是:application/x-www-form-urlencoded,表示普通的form表单元素提交,在发送前编码所有字符,提交的参数格式遵循:name=value&name=value&name=value...。
multipart/form-data,表示不对字符编码。直接提交二进制文件流。在使用包含文件上传控件的form表单时,必须使用该值。
text/plain,表示空格转换为 "+" 加号,但不对特殊字符编码。
index.jsp页面代码
<%@page contentType="text/html; charset=utf-8"%>
<!doctype html>
<html>
<head>
<title>apache commons fileupload</title>
</head>
<body> <form action="${pageContext.request.contextPath }/fileupload" method="post" enctype="multipart/form-data">
<%-- 普通的控件 --%>
username<input type="text" name="username"><br> <%-- FileItem --%>
<%-- 文件控件 --%>
file1<input type="file" name="file1"><br> <%-- FileItem --%>
file2<input type="file" name="file2"><br> <%-- FileItem --%>
<input type="submit" value="submit">
</form> </body>
</html>
后端接收文件接口
准备JAR包,添加到项目中
Servlet代码
package com.wb.controller; import java.io.File;
import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet(urlPatterns = {"/fileupload"})
public class FileUpController extends HttpServlet{ private static final long serialVersionUID = 5351212300627874456L; @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建一个“硬盘文件条目工厂”对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置阈值,设置JVM一次能够处理的文件大小(默认吞吐量是10KB)
factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
//设置临时文件的存储位置(文件大小大于吞吐量的话就必须设置这个值,比如文件大小:1GB ,一次吞吐量:1MB)
factory.setRepository(new File("E:\\TestFileUpload\\files")); //创建核心对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//设置最大可支持的文件大小(10MB)
fileUpload.setFileSizeMax(1024*1024*10);
//设置转换时使用的字符集
//fileUpload.setHeaderEncoding("UTF-8"); if (ServletFileUpload.isMultipartContent(req)) {
try {
//解析请求
List<FileItem> fileItems = fileUpload.parseRequest(req);
for (FileItem fileItem : fileItems) {
if(fileItem.isFormField()) {//判断该FileItem为一个普通的form元素
//获取字段名
String fieldName = fileItem.getFieldName();
//获取字段值,并解决乱码
String fieldValue = fileItem.getString("UTF-8");
//String fieldValue = fileItem.getString();
System.out.println(fieldName + ":" + fieldValue);
}else {//判断该FileItem为一个文件
//获取文件名
String fileName = fileItem.getName();
System.out.println("fileName=" + fileName);
//获取文件大小
long fileSize = fileItem.getSize();
System.out.println("fileSize=" + fileSize);
fileItem.write(new File("E:\\TestFileUpload\\files" + File.separator + fileName));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
} }
Apache Commons FileUpload 实现文件上传的更多相关文章
- Apache Commons fileUpload实现文件上传之一
		
需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package ...
 - Apache Commons FileUpload实现文件上传
		
一.Apache Commons-FileUpload简介 Apache Commons是一个专注于可重用Java组件的所有方面的 Apache 项目. Apache Commons项目由三个部分组成 ...
 - Spring MVC使用commons fileupload实现文件上传功能
		
通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...
 - zt对于C#中的FileUpload解决文件上传大小限制的问题设置
		
对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...
 - 使用fileupload实现文件上传
		
一. fileupload组件工作原理 先来张图片, 帮助大家理解 fileupload核心API 1. DiskFileItemFactory构造器1) DiskFileItemFactory() ...
 - FileUpload实现文件上传(包含多文件)
		
package com.hzml.serve; import java.io.File; import java.io.IOException; import java.io.PrintWriter; ...
 - asp.net web常用控件FileUpload(文件上传控件)
		
FileUpload控件的主要中能:向指定目录上传文件,该控件包括一个文本框和一个浏览按钮. 常用的属性:FileBytes,FileContent.FileName.HasFile.PostedFi ...
 - zk FileUpload(文件上传)
		
<button label="上传 Image" upload="true,maxsize=1073741824"> <attribute n ...
 - extjs采用fileupload进行文件上传后台实现
		
前台js: form: Ext.define("GS.base.BasicImportForm",{ extend:"Ext.form.Panel", ...
 
随机推荐
- 移值UCOS2到M4核与M3核的区别
			
之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...
 - 获得32位UUID字符串和指定数目的UUID
			
在common包中创建类文件UUIDUtils.java package sinosoft.bjredcross.common; import java.util.UUID; public class ...
 - scrapy 爬取智联招聘
			
准备工作 1. scrapy startproject Jobs 2. cd Jobs 3. scrapy genspider ZhaopinSpider www.zhaopin.com 4. scr ...
 - Windows PowerShell基本语法及常用命令
			
PowerShell常用命令: 一 Get类 1.Get-Command : 得到所有PowerShell命令,获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的 ...
 - Servlet获取 URL 地址
			
使用 ServletRequest 的如下方法 getContextPath 取得项目名 getServletPath 取得Servlet名 getPathInfo 取得Servlet后的URL名,不 ...
 - Python3创建项目时创建了一个叫做“keyword"的包,运行项目时报ImportError: cannot import name 'iskeyword'错误
			
导致该问题的原因为在Python3中keyword是python的关键字包,所以在给包命名时应避免使用关键字进行命名.解决方法,将keword包名称修改为'keywords'就可以了.
 - java37
			
1.键盘录入格式: Scanner sc = new Scanner(System.in); int i = sc.nextInt();//录入整数 字符: Scanner sc1 = new Sca ...
 - python 环境变量设置PYTHONPATH
			
PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找. 打印PYTHONPATH: import os print sys.path >['' ...
 - JavaScript中Object.keys用法
			
Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组. var data={a:1,b:2,c:9,d:4,e:5}; console.log(data);//{a: 1, ...
 - 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
			
不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器都会被屏蔽.这是微信对第三方下载域名实施的拦截政策.被拦截了用户在微信内打开就会提示“已停止访问该网页”. 那么当我们遇到这个 ...