1. package com.hzml.serve;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.util.*;
  7. import javax.servlet.ServletContext;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.annotation.WebServlet;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import org.apache.commons.fileupload.FileItem;
  14. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  15. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  16.  
  17. @WebServlet("/FileUploadServlet")
  18. public class FileUploadServlet extends HttpServlet {
  19. private String filePath; // 文件存放目录
  20. private String tempPath; // 临时文件目录
  21. // 初始化
  22. public void init() throws ServletException
  23. {
  24. super.init();
  25. // 从配置文件中获得初始化参数
  26. ServletContext context = getServletContext();
  27. filePath = context.getRealPath("/") + "/hzmlFile";
  28. tempPath = context.getRealPath("/") + "/hzmlFile";
  29. System.out.println("文件存放目录、临时文件目录准备完毕 ...");
  30. }
  31.  
  32. private void process(HttpServletRequest req, HttpServletResponse res)
  33. throws IOException, ServletException{
  34. res.setContentType("text/plain;charset=gbk");
  35. PrintWriter pw = res.getWriter();
  36. try{
  37. DiskFileItemFactory diskFactory = new DiskFileItemFactory();
  38. // threshold 极限、临界值,即硬盘缓存 1M
  39. diskFactory.setSizeThreshold(4 * 1024);
  40. // repository 贮藏室,即临时文件目录
  41. diskFactory.setRepository(new File(tempPath));
  42.  
  43. ServletFileUpload upload = new ServletFileUpload(diskFactory);
  44. // 设置允许上传的最大文件大小 4M
  45. upload.setSizeMax(4 * 1024 * 1024);
  46. // 解析HTTP请求消息头
  47. List fileItems = upload.parseRequest(req);
  48. Iterator iter = fileItems.iterator();
  49. while(iter.hasNext())
  50. {
  51. FileItem item = (FileItem)iter.next();
  52. if(item.isFormField())
  53. {
  54. System.out.println("处理表单内容 ...");
  55. processFormField(item, pw);
  56. }else{
  57. System.out.println("处理上传的文件 ...");
  58. processUploadFile(item, pw);
  59. }
  60. }// end while()
  61.  
  62. pw.close();
  63. }catch(Exception e){
  64. System.out.println("使用 fileupload 包时发生异常 ...");
  65. e.printStackTrace();
  66. }// end try ... catch ...
  67. }
  68.  
  69. public void doPost(HttpServletRequest req, HttpServletResponse res)
  70. throws IOException, ServletException {
  71. process(req, res);
  72. }
  73.  
  74. protected void doGet(HttpServletRequest req, HttpServletResponse res)
  75. throws ServletException, IOException {
  76. process(req, res);
  77. }
  78.  
  79. // 处理表单内容
  80. private void processFormField(FileItem item, PrintWriter pw)
  81. throws Exception
  82. {
  83. String name = item.getFieldName();
  84. String value = item.getString();
  85. pw.println(name + " : " + value + "\r\n");
  86. }
  87.  
  88. // 处理上传的文件
  89. private void processUploadFile(FileItem item, PrintWriter pw)
  90. throws Exception
  91. {
  92. // 此时的文件名包含了完整的路径,得注意加工一下
  93. String filename = item.getName();
  94. System.out.println("完整的文件名:" + filename);
  95. int index = filename.lastIndexOf("\\");
  96. filename = filename.substring(index + 1, filename.length());
  97.  
  98. long fileSize = item.getSize();
  99.  
  100. if("".equals(filename) && fileSize == 0)
  101. {
  102. System.out.println("文件名为空 ...");
  103. return;
  104. }
  105. pw.println(filePath);
  106. File uploadFile = new File(filePath + "/" + filename);
  107. item.write(uploadFile);
  108. pw.println(filename + " 文件保存完毕 ...");
  109. pw.println("文件大小为 :" + fileSize + "\r\n");
  110. }
  111. }

FileUpload实现文件上传(包含多文件)的更多相关文章

  1. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  2. struts文件上传(多文件)

    第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  3. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  4. yii2.0单文件上传和多文件上传

    yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规 ...

  5. 使用PHP实现文件上传和多文件上传

    PHP 2013 年 9 月 4 日 暂无评论 在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言 ...

  6. Struts1文件上传、单文件、多文件上传【Struts1】

     将struts1文件上传的操作汇总了一下,包括单文件上传和多文件上传,内容如下,留作备忘: Struts2实现文件上传的文章(http://blog.csdn.net/itwit/article/d ...

  7. 强大的支持多文件上传的jQuery文件上传插件Uploadify

    支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...

  8. skymvc文件上传支持多文件上传

    skymvc文件上传支持多文件上传 支持单文件.多文件上传 可以设定 文件大小.存储目录.文件类型 //上传的文件目录 $this->upload->uploaddir="att ...

  9. (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】

    文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个表单页面(这里使用thymleaf); (4)编写controlle ...

  10. apache fileupload 文件上传,及文件进度设置获取

    文件上传action处理: boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) ...

随机推荐

  1. vb- ----之常用函数

    [VB]常用函数 2007-10-25 10:52 3375人阅读 评论(1) 收藏 举报 vbstringdateintegervbscriptwindows (一)类型转换类函数1. CType( ...

  2. jsti 和EL用法注意点

    今天使用stl 结合El做jsp页面展现,出现了个问题,怎么调也调不好,最后将jstl的源码拿来跟踪调了一下才明白其中的道理. 在使用jstl tag <c:forEach var=" ...

  3. java解析xml

    一.Document对象相关   1.读取XML文件,获得document对象.             SAXReader reader = new SAXReader();             ...

  4. SQL Saturday活动再起

    SQL Saturday活动再起 时间:2015年05月09日(星期六) 地点:上海徐汇区港汇2座10楼(10.073) 我们相约港汇2座10楼(10.073),SQL PASS上海分会的SQLSat ...

  5. Magicodes.WeiChat——版本发布历史

    购买地址:https://item.taobao.com/item.htm?id=520205558575 您可以在新标签页打开此图,以查看原始图片. Magicodes.WeiChat为湖南心莱信息 ...

  6. Smack 3.3.1 发布,Java 的 XMPP 开发包

    Smack 3.3.1 发布了,这是一个小更新版本,主要更新包括: [SMACK-441] - Memory leak in KeepAliveManager [SMACK-447] - Compre ...

  7. Android度量单位说明(DIP,DP,PX,SP) (转帖)

    (一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...

  8. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  9. 开始VS 2012中LightSwitch系列的第5部分:我可以使用用户权限来控制访问权吗?

    [原文发表地址]  Beginning LightSwitch in VS 2012 Part 5: May I? Controlling Access with User Permissions [ ...

  10. js操作Dom的一些方法简化

    众所周知JQ的选择符很强大,一些看起来很难实现的功能只要在$符号中传入简单的字符串就可以获取到各种层级关系的DOM,而却不用考虑浏览器的兼容性.但有时候在做小项目的时候并不需要引入JQ,而又不想频繁繁 ...