首先 确定要上传的目录

WEB.XML 文件

Java代码  
  1. <listener>
  2. <listener-class><!-- 临时文件收集器 , 支持超大附件必须项 -->
  3. org.apache.commons.fileupload.servlet.FileCleanerCleanup
  4. </listener-class>
  5. </listener>
  6. <context-param>
  7. <param-name>tempXlsPath</param-name><!-- 要上传的目录 -->
  8. <param-value>/WEB-INF/temp/</param-value>
  9. </context-param>
  10. <servlet>
  11. <servlet-name>UploadServlet</servlet-name>
  12. <servlet-class>
  13. com.thams.web.fileServlet.UploadServlet
  14. </servlet-class>
  15. </servlet>
  16. <servlet-mapping>
  17. <servlet-name>UploadServlet</servlet-name>
  18. <url-pattern>/servlet/UploadServlet</url-pattern>
  19. </servlet-mapping>

servlet

Java代码  
  1. package com.thams.web.fileServlet;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.commons.fileupload.FileItem;
  11. import org.apache.commons.fileupload.FileItemFactory;
  12. import org.apache.commons.fileupload.FileUploadException;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.FileCleanerCleanup;
  15. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  16. import org.apache.commons.io.FileCleaningTracker;
  17. import org.apache.commons.io.FilenameUtils;
  18. import org.apache.log4j.Logger;
  19. /**
  20. * @author serv
  21. */
  22. public class UploadServlet extends HttpServlet {
  23. private static Logger log = Logger.getLogger(UploadServlet.class);
  24. protected void service(HttpServletRequest request,
  25. HttpServletResponse response) throws ServletException, IOException {
  26. response.setContentType("text/html;charset=UTF-8");
  27. // Check that we have a file upload request
  28. boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  29. if (!isMultipart) {
  30. log.debug("没有可上传的文件, 你想干什么 !");
  31. return;
  32. }
  33. // Create a factory for disk-based file items
  34. String tempFilePath = getServletContext().getRealPath("/")+getServletContext().getInitParameter("tempXlsPath");
  35. FileItemFactory factory = newDiskFileItemFactory(getServletContext(), new File(tempFilePath));
  36. // Create a new file upload handler
  37. ServletFileUpload upload = new ServletFileUpload(factory);
  38. upload.setHeaderEncoding("UTF-8");
  39. /* FileItem */
  40. List<FileItem> items = null;
  41. try {
  42. // Parse the request
  43. items = (List<FileItem>) upload.parseRequest(request);
  44. String filename = null;
  45. for (FileItem fileItem : items) {
  46. if (!fileItem.isFormField()){//file
  47. filename = FilenameUtils.getName(fileItem.getName());
  48. fileItem.write(new File(tempFilePath+filename));
  49. response.getWriter().write(tempFilePath+filename+"<br>");
  50. }
  51. }
  52. } catch (FileUploadException e) {
  53. log.error(e.getMessage());
  54. } catch (Exception e) {
  55. log.error(e.getMessage());
  56. }
  57. }
  58. /**
  59. * The FileCleanerCleanup provides an instance of org.apache.commons.io.FileCleaningTracker.
  60. * This instance must be used when creating a org.apache.commons.fileupload.disk.DiskFileItemFactory.
  61. */
  62. public static DiskFileItemFactory newDiskFileItemFactory(
  63. ServletContext context, File repository) {
  64. FileCleaningTracker fileCleaningTracker = FileCleanerCleanup
  65. .getFileCleaningTracker(context);
  66. DiskFileItemFactory factory = new DiskFileItemFactory(
  67. DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository);
  68. factory.setFileCleaningTracker(fileCleaningTracker);
  69. return factory;
  70. }
  71. }

测试页面

Java代码  
  1. <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
  2. <input id="file1" name="file1" type="file" class="input400"><br>
  3. <input id="file2" name="file2" type="file" class="input400"><br>
  4. <input id="file3" name="file3" type="file" class="input400"><br>
  5. <input id="file4" name="file4" type="file" class="input400"><br>
  6. <input type="submit" id="submit" value="提交" />
  7. </form>

测试结果

页面输出:

文件上传完成。

DEMO下载地址:https://dwz.cn/fgXtRtnu

java 支持 超大上G , 多附件上传的更多相关文章

  1. HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法

    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...

  2. java 附件上传、下载前后端代码

    前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...

  3. Java内存映射,上G大文件轻松处理

    内存映射文件(Memory-mapped File),指的是将一段虚拟内存逐字节映射于一个文件,使得应用程序处理文件如同访问主内存(但在真正使用到这些数据前却不会消耗物理内存,也不会有读写磁盘的操作) ...

  4. java附件上传下载磁盘版

    ACTION public class UploadAction extends BaseAction { private static final long serialVersionUID = 1 ...

  5. Springmvc file多附件上传 显示 删除操作

    之前项目需求要做一个多附件上传 并显示上传文件 带删除操作 一筹莫展之际搜到某个兄弟发的博客感觉非常好用被我copy下来了此贴算是改良版 再次感谢(忘记叫什么了时间也有点久没有历史记录了)先上图 基于 ...

  6. asp.net结合uploadify实现多附件上传

    1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...

  7. 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

    大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中 ...

  8. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  9. JS实现多附件上传(asp.net)

    前几天,用户提出一个需求-多附件上传,另外,每个上传文件要加一个别名,本人创新少,从网上收集了资料,稍微改写,满足了 客户的需求.在应用到程序之前,先做了个小测试,测试通过,小高兴,就记录下了这个小测 ...

随机推荐

  1. 团队第一次 # scrum meeting

    github 本此会议项目由PM召开,召开时间为4-1日晚上9点 召开时长30分钟 任务表格 袁勤 重新搭建原本的项目 https://github.com/buaa-2016/BuaaPhyLabB ...

  2. 使用Jenkins部署Python项目

    廖大使用Fabric部署的.我使用Jenkins试试部署过程.虽然说是用python项目部署测试的,但其他项目也是同理的. 参考Jenkins+Python部署完整版,不过安装方式不同. 安装tomc ...

  3. scp: command not found

    scp 不能用? [root@doc]# scp jdk-8u144-linux-x64.tar.gz root@10.10.10.17:/root/ root@10.10.10.17's passw ...

  4. 深度学习原理与框架-递归神经网络-RNN_exmaple(代码) 1.rnn.BasicLSTMCell(构造基本网络) 2.tf.nn.dynamic_rnn(执行rnn网络) 3.tf.expand_dim(增加输入数据的维度) 4.tf.tile(在某个维度上按照倍数进行平铺迭代) 5.tf.squeeze(去除维度上为1的维度)

    1. rnn.BasicLSTMCell(num_hidden) #  构造单层的lstm网络结构 参数说明:num_hidden表示隐藏层的个数 2.tf.nn.dynamic_rnn(cell, ...

  5. Apache配置默认主页

    Apache配置默认主页 进入Apache的conf目录 打开httpd.conf文件输入: 在文件末位添加: <Directory "F:/www_php/blog_com/my_b ...

  6. python 的包的导入

    已经写过一篇包的导入了,最近又遇到了点问题,所以想把这些再搞的明白点就又试了试 代码结构如下 在test目录下,有Admin包,home包,在home下有它的子包foo 各个文件代码如下 admins ...

  7. Linux Oracle安装

    lsnrctl status  // 查看linux系统oracle的监听状态lsnrctl start   // 启动linux系统oracle的监听状态 sqlplus /nolog  // 连接 ...

  8. Blob分析--粘连颗粒检测 基于距离变换的分水岭区域分割 盆地与原连通域求交集

    文章转自微信公众号:机器视觉那些事 *******************************************************************公众号:机器视觉那些事儿*** ...

  9. hadoop的job执行在yarn中内存分配调节————Container [pid=108284,containerID=container_e19_1533108188813_12125_01_000002] is running beyond virtual memory limits. Current usage: 653.1 MB of 2 GB physical memory used

    实际遇到的真实问题,解决方法: 1.调整虚拟内存率yarn.nodemanager.vmem-pmem-ratio (这个hadoop默认是2.1) 2.调整map与reduce的在AM中的大小大于y ...

  10. “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)

    在前一部分的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图: 很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来! 问题在哪里:我们先回顾一下ASta ...