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", ...
随机推荐
- 在Linux 安装Python3.5.6详细文档!!!!
在Linux 安装Python3.5.6详细文档!!!! 1.安装相关依赖库(工具包) yum install gcc patch libffi-devel python-devel zlib-de ...
- hibernate session.createSQLQuery(sql); 通过命令删除
@Override public boolean deleteBySql(String sql) { Session session = getSession(); @SuppressWarnings ...
- CAS SSO单点登录框架学习
1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用( ...
- windows socket 文件下载上传
socket 图片 文件 下载上传 数据库 线程池 存入图片 等
- [Hadoop]Hadoop章3 NameNode的ZKFC机制
基本概念 首先我们要明确ZKFC 是什么,有什么作用: zkfc是什么? ZooKeeperFailoverController 它是什么?是Hadoop中通过ZK实现FC功能的一个实用工具. 主要作 ...
- 重启rabbitmq服务
重启rabbitmq服务通过两个命令来实现: rabbitmqctl stop :停止rabbitmq rabbitmq-server restart : 重启rabbitmq 因为rabbitmqc ...
- linux简单安装方法
一.配置静态IP NAT:模式: 修改网卡eth0 vim /etc/sysconfig/network-scripts/ifcfg-eth0 内容如下: DEVICE=eth0 HWADDR=:0C ...
- 阿里oss图片上传
<script type="text/javascript" src="../../static/js/manage/oss_uploader.js"&g ...
- JavaWeb(一)-Servlet知识
一.Servlet简介 Servlet是sun公司提供一门用于开发动态web资源的技术. sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏 ...
- 移动端各种滚动场景需求的插件better-scroll
移动端各种滚动场景需求的插件: 文档地址: better-scroll:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/#better- ...