相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处理的地方。

常用的上传组件有如下几种:  

Apache 的 Commons FileUpload

JavaZoom 的 UploadBean

jspSmartUpload

但用的最多的应该是Apache 的 Commons FileUpload。

以下为具体的步骤:

1、下载组件

Apache 的 Commons FileUpload包含commons-fileupload.jar和commons-io.jar,下载地址如下:

commons-fileupload.jar:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

commons-io.jar:http://commons.apache.org/proper/commons-io/download_io.cgi

2、新建项目,代码如下:

参考:http://www.runoob.com/servlet/servlet-file-uploading.html

JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><div><form action="UploadServlet" method="POST" enctype="multipart/form-data"><table><tr><td><label for="file1">文件1:</label></td><td><input type="file" id="file1" name="file1"></td></tr><tr><td><label for="file2">文件2:</label></td><td><input type="file" id="file2" name="file2"></td></tr><tr><td><label for="file3">文件3:</label></td><td><input type="file" id="file3" name="file3"></td></tr><tr><td><label for="file3">Text:</label></td><td><input type="text" id="text1" name="text1"></td></tr><tr><td colspan="2"><input type="submit" value="上传" name="upload"></td></tr></table></form></div></body>
</html>

Servlet:

注意:全部采用3.0的标注功能。

package uploadtest;import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class UploadServlet*/
@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public UploadServlet() {super();// TODO Auto-generated constructor stub
    }/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub
    }/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// 检测是否为多媒体上传if (!ServletFileUpload.isMultipartContent(request)) {// 如果不是则停止PrintWriter writer = response.getWriter();writer.println("Error: 表单必须包含 enctype=multipart/form-data");writer.flush();return;}// 配置上传参数DiskFileItemFactory factory = new DiskFileItemFactory();// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中factory.setSizeThreshold(1024 * 1024 * 3);// 3MB// 设置临时存储目录factory.setRepository(new File(System.getProperty("java.io.tmpdir")));//系统默认的临时文件路径,C:\Users\Jim\AppData\Local\Temp\ //构造对象ServletFileUpload upload = new ServletFileUpload(factory);// 设置最大文件上传值upload.setFileSizeMax(1024 * 1024 * 40);// 40MB// 设置最大请求值 (包含文件和表单数据)upload.setSizeMax(1024 * 1024 * 50);// 50MB// 构造临时路径来存储上传的文件// 这个路径相对当前应用的目录String uploadPath = request.getServletContext().getRealPath("/") + "Uploads"+ File.separator+new SimpleDateFormat("yyyyMMdd").format(new Date());// 如果目录不存在则创建Tools.isExistDir(uploadPath);//看目录是否已经创建   try {// 解析请求的内容提取文件数据List<FileItem> formItems = upload.parseRequest(request);if (formItems != null && formItems.size() > 0) {// 迭代表单数据for (FileItem item : formItems) {// 处理不在表单中的字段if (!item.isFormField() && item.getName()!=null && !item.getName().equals("")) {String fileName = new SimpleDateFormat("yyyyMMddHHmmsssss").format(new Date())+java.util.UUID.randomUUID() + new File(item.getName()).getName();//由于获取item的名称时是本地的全路径,必须使用file对象进行最后的转换得到最后的文件名String filePath = uploadPath + File.separator + fileName;File storeFile = new File(filePath);// 在控制台输出文件的上传路径
                        System.out.println(filePath);// 保存文件到硬盘
                        item.write(storeFile);System.out.println("上传成功!");}}}} catch (Exception e) {e.printStackTrace();}        }
}

可以看出,使用组件的方式更为简便,且很多方法已经封装好,直接调用即可。

测试工程:https://github.com/easonjim/5_java_example/tree/master/uploadtest/test3

另外,以下还收集了一些组件的深入使用方式:

http://www.cnblogs.com/h--d/p/5761649.html

http://blog.csdn.net/qq_32079585/article/details/51344719

http://www.cnblogs.com/xdp-gacl/p/4200090.html

http://www.cnblogs.com/hongten/archive/2011/07/26/2117340.html

转载于:https://www.cnblogs.com/EasonJim/p/6576573.html

Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)相关推荐

  1. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  2. java中excel文件上传

    java文件上传 excel文件上传的两种方式 1.使用ExcelsUtils上传文件 2.把文件转换成流上传(支持多sheet) 代码实现 第一种方式 ExcelsUtils.ReadMultipa ...

  3. java中ftp文件上传和中文乱码解决

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前几天 有个需求就是上传文件的时候,本地存一份,其他服务器也保存一份,于是就研究了一下,功能只实现了 ...

  4. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

  5. 在Struts 2中实现文件上传

    前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问题. 实现原理 Struts 2是通过Commons FileUpload文件上传.Commons ...

  6. java里面的文件上传与下载

    java里面的文件上传与下载 文件的上传与下载主要用到两种方法: 1.方法一:commons-fileupload.jar commons-io.jar apache的commons-fileuplo ...

  7. jsp servlet示例_Servlet和JSP中的文件上传示例

    jsp servlet示例 使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务. 在对Servlet或JSP进行编码以处理文件上传请求之前,您需要了解一点有关HTML和 ...

  8. Servlet和JSP中的文件上传示例

    使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务. 在对Servlet或JSP进行编码以处理文件上传请求之前,您需要了解一点有关HTML和HTTP协议中文件上传支持的 ...

  9. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?

    问题:JavaWeb中实现文件上传的方式有哪些? 上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式 Servlet2.5 方式 Servlet ...

最新文章

  1. android Style(样式)的解析
  2. JHipster生成微服务架构的应用栈(二)- 认证微服务示例
  3. 6个2教你认识递归的力量!
  4. 数学模型与数据结构的丝连
  5. 在LINQPad中征服ASP.NET Boilerplate查询性能
  6. 导航猫(NaviCat for MySql)建立表的方法
  7. H5(仅仅是个地址)
  8. cordova打开外部链接_企业网盘的分享链接功能 这种的你一定没见过
  9. C语言n番战--数组(三)
  10. xshell堡垒机_XShell运维工具之跳板机配置
  11. 【工作小技巧】cmd 批量移动文件
  12. MySQL LEFT函数的使用
  13. Ubuntu突然无法解析域名解决
  14. 高质量解读《互联网企业安全高级指南》三部曲——实践篇
  15. 1-智能QOS方案介绍
  16. 怎样在群晖中安装GitLab用于项目代码管理
  17. 上古卷轴3晨风职业_上古卷轴3晨风
  18. 微软认证一览表(附图)
  19. 程序员又背锅了!虾米音乐代码注释惊现“穷逼vip”
  20. php session_id 生成规则,php中Session的生成机制、回收机制和存储机制探究

热门文章

  1. 什么是LinkedList?什么时候使用它呢?Java LinkedList结构、用法及源码解析
  2. python中的新式类与旧式类的一些基于descriptor的概念(上)
  3. Cobalt Strike 的安装与简单使用
  4. 深入理解 Embedding层的本质
  5. 如何在CPU上优化GEMM矩阵乘法
  6. 手机与Camera CCM技术发展趋势
  7. CVD和ALD薄膜沉积技术应用领域
  8. 在C++中加载TorchScript模型
  9. 开放式神经网络交换-ONNX(上)
  10. 处理器解决物联网和人工智能的融合