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

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();
           }
       }
   }

}

原文地址:https://www.cnblogs.com/wbxk/p/10061882.html

时间: 2024-10-26 00:30:54

Apache Commons FileUpload实现文件上传的相关文章

Apache Commons fileUpload实现文件上传之一

  需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package web.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http

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

通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties> <spring.version>3.0.7.RELEASE </spring.version> <junit.version>3.8.1</junit.version> <fileupload.version>1.2.2</fileupl

使用fileupload实现文件上传(1)

一. fileupload组件工作原理 先来张图片, 帮助大家理解 fileupload核心API 1. DiskFileItemFactory构造器1) DiskFileItemFactory() // 使用默认配置2) DiskFileItemFactory(int sizeThreshold, File repository) sizeThreshold 内存缓冲区, 不能设置太大, 否则会导致JVM崩溃 repository 临时文件目录 2. ServletFileUpload1) i

在Servlet中利用Apache开源类库实现文件上传

本文结合具体的范例,介绍如何通过Apache开源类库提供的软件包,在Servlet中进行文件上传.本文的参考书籍是<Tomcat与Java Web开发技术详解>第三版,作者:孙卫琴. 本文所用的软件版本为:Window10,JDK10,Tomcat9.本文所涉及的源代码的下载网址为:http://www.javathinker.net/javaweb/upload-app.rar Apache开源软件组织提供了与文件上传有关的两个软件包:? fileupload软件包(commons-file

完成FileUpload的文件上传功能,且可改按钮样式

FileUpload控件: 更改按钮样式思路: 自己定义一个按钮,设置该按钮的样式,然后将FileUpload控件通过定位定在自己定义的按钮上面,设置z-index,使得控件浮在自己定义的按钮上面,记得设置该控件为透明,这样,看着点的是自己定义的那个按钮,实际上点击的是控件,然后定义一个"上传"按钮,点击上传按钮时进入代码层: 上传文件思路: 1)确定上传文件所保存的路径: 2)判断路径是否存在,存在则继续,不存在则创建: 3)获取上传文件的上传路径 或者文件名 4)保存文件: 多文件

配置fileupload(文件上传组件)

<properties> <commons-fileupload.version>1.3.1</commons-fileupload.version> </properties> <dependencyManagement> <dependencies> <!-- 文件上传组件 --> <dependency> <groupId>commons-fileupload</groupId>

SpringMVC使用FileUpload进行文件上传

导入FileUpload和common-io的Jar包 注意:1.Struts2需要使用其他方法:struts2过滤时,会改变reqeust的类型,由HttpServletRequest变成MultiPartRequestWrapper 1.Test.jsp: <form action="<%=basePath%>self/testFileUpload.do" method="post" enctype="multipart/form-d

zk FileUpload(文件上传)

<button label="上传 Image" upload="true,maxsize=1073741824"> <attribute name="onUpload"><![CDATA[ org.zkoss.util.media.Media media = event.getMedia(); String fileName = ""; if(media!=null) fileName = me

fileupload文件上传

在使用java开发文件上传时,网络上有很多不一样的工具.但是每次如果都需要开发一次,对于使用者来说,这个过程是浪费时间的.所以我们有必要选取其中一个适合自己的文件上传组件,然后对其进一步分装,形成自己的开发工具类.下面我针对自己的工程,对fileupload进行了封装. fileupload是apache的一个组件,要想使用fileupload,需要用到下面两个jar:commons-fileupload-1.3.1.jar,commons-io-1.1.jar(版本不一样,可能相关jar包不一