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中的一个组件。

Commons FileUpload 的JAR包下载

Commons IO 的JAR包下载

前端文件上传页面

文件上传注意事项

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 实现文件上传的更多相关文章

  1. Apache Commons fileUpload实现文件上传之一

      需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package ...

  2. Apache Commons FileUpload实现文件上传

    一.Apache Commons-FileUpload简介 Apache Commons是一个专注于可重用Java组件的所有方面的 Apache 项目. Apache Commons项目由三个部分组成 ...

  3. Spring MVC使用commons fileupload实现文件上传功能

    通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...

  4. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

  5. 使用fileupload实现文件上传

    一. fileupload组件工作原理 先来张图片, 帮助大家理解 fileupload核心API 1. DiskFileItemFactory构造器1) DiskFileItemFactory() ...

  6. FileUpload实现文件上传(包含多文件)

    package com.hzml.serve; import java.io.File; import java.io.IOException; import java.io.PrintWriter; ...

  7. asp.net web常用控件FileUpload(文件上传控件)

    FileUpload控件的主要中能:向指定目录上传文件,该控件包括一个文本框和一个浏览按钮. 常用的属性:FileBytes,FileContent.FileName.HasFile.PostedFi ...

  8. zk FileUpload(文件上传)

    <button label="上传 Image" upload="true,maxsize=1073741824"> <attribute n ...

  9. extjs采用fileupload进行文件上传后台实现

    前台js: form: Ext.define("GS.base.BasicImportForm",{    extend:"Ext.form.Panel",   ...

随机推荐

  1. python zlib ,zlib 压缩流

    zlib 字符串:使用zlib.compress可以压缩字符串.使用zlib.decompress可以解压字符串. 数据流:压缩:compressobj,解压:decompressobj       ...

  2. Chart Parser 中 Earley's 算法的应用

    1. 基本概念 1.1 状态 state 上下文无关文法规则 圆点 · (左边是已分析的,右边是未分析的:点在最右端表示完成状态,否则为未完成状态) 状态的起止位置 1.2 基本操作/算子 opera ...

  3. PowerDesigner反向生成PDM和name与注释互换

    Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl 'the current model 'get the ...

  4. 20175325 《JAVA程序设计》实验一 《JAVA开发环境的熟悉》实验报告

    20175325 <JAVA程序设计>实验一 <JAVA开发环境的熟悉>实验报告 一.实验内容及步骤 (一).实验一: 实验要求: 0 参考实验要求 1 建立"自己学 ...

  5. jquery取每个li元素下的第三个a元素

    $('li').find('a:eq(2)');

  6. 20165213 周启航Exp2 后门原理与实践

    Exp2 后门原理与实践 实验内容 任务一 使用netcat获取主机操作Shell,cron启动 1.确认kali和主机的ip,关闭防火墙 (192.169.127.132) (10.1.1.197) ...

  7. tomcat 请求处理流程分析(基于nio)

    在这里我先简单的说下bio和nio的区别 这里我以电话客服的情况来解释 bio 一个客户对应一个客服, 假如客户比较麻烦,中途不挂电话,或者去做其他事情了,而客服资源会被一直占用 导致的后果是系统处理 ...

  8. SHELL脚本学习-练习写一个脚本4

    #编写一个脚本时,自动生成”#!/bin/bash”这一行和相关注释信息. 把以下的代码保存为一个sh文件,比如test.sh , 新建脚本是使用  bash test.sh newfile 即可. ...

  9. Python3.7 Scrapy crawl 运行出错解决方法

    安装的是Python3.7,装上依赖包和scrapy后运行爬虫命令出错 File "D:\Python37\lib\site-packages\scrapy\extensions\telne ...

  10. win10与虚拟机fedora14使用samba文件共享

    参考路径:http://blog.sina.com.cn/s/blog_ae9507be01017tyz.html 最近需要配置samba,试了好多次,终于搞定.奉上配置及共享文件的过程,以供参考. ...