需要用到Tomcat还有commons-fileupload-1.3.1.jar包和commons-io-2.4.jar包。

如果需要传一个文件,form表单必须有enctype="multipart/form-data"属性,否则服务器会认不到。

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.  

如:我的index.jsp页面

<body>
   <form action="test.jsp" enctype="multipart/form-data"  method="post" >
   <p>文件名:<input type="text" name="filedname"></p>
   <p>选择图片:<input type="file" name="selectfile"></p>
   <input type="submit" value="提交">
   </form>
  </body>

然后数据提交到test.jsp页面:

首先要判断请求的数据是否是否是multipart/form-data;

boolean flag=ServletFileUpload.isMultipartContent(request);

if (flag) {
  FileItemFactory factory = new DiskFileItemFactory();
  //设置缓冲区大小4kb
  ((DiskFileItemFactory) factory).setSizeThreshold(1024 * 4);
  //设置上传文件用到临时文件存放路径
  String temppath = this.getServletContext().getRealPath(
    "/WEB-INF/temp/");
  File temp = new File(temppath);

//如果不设置存放路径,那么临时文件将被储存在"java.io.tmpdir"这个JVM环境属性所指定的目录中,tomcat 5.5.9将这个属性设置为了“<tomcat安装目录>/temp/”目录。
  ((DiskFileItemFactory) factory).setRepository(temp);
  ServletFileUpload sfu = new ServletFileUpload(factory);
  //设置单个文件的最大限制
  sfu.setSizeMax(1024 * 1024 * 3);
  //将页面请求传递信息最大值设置为50M
  //upload.setSizeMax(1024*1024*50);

try {

//解析数据
   List<FileItem> list = sfu.parseRequest(request);
   Iterator<FileItem> iter = list.iterator();
   while (iter.hasNext()) {
    FileItem item = iter.next();
    if (item.isFormField()) {//如果是普通表单
        String filedname = item.getFieldName();
        if (filedname.equals("filedname")) {
               out.print(item.getString("utf-8"));
            }
    } else {
     String filename = item.getName();
     if (filename != null && filename != "") {
      List<String> filetype = Arrays.asList("gif",  "bmp", "jpg");
      //从.后面+1下表截取到末尾,再忽略大写
      String ext = filename.substring(
        filename.lastIndexOf(".") + 1)
        .toLowerCase();
      if (!filetype.contains(ext)) {
       out.print("上传失败,文件类型只能是gif、bmp、jpg");
      } else {

File file = new File(item.getName());
       String filepath = "/WEB-INF/upload/";
       filepath = this.getServletContext()
         .getRealPath(filepath);
       File savefile = new File(filepath,
         file.getName());
       item.write(savefile);
       out.print(item.getFieldName() + "上传成功!文件大小是:" + item.getSize()+ "bytes!");

}
     }
    }
   }
  } catch (FileUploadBase.SizeLimitExceededException ex) {
   out.print("上传文件失败,文件太大,单个文件的最大限制是:" + sfu.getSizeMax()+ "bytes!");
  } catch (Exception e) {
   e.printStackTrace();
  }

}

用Commons-FileUpload组件实现文件上传的更多相关文章

  1. 模拟文件上传(二):使用apache fileupload组件进行文件上传

    其中涉及到的jar包: jsp显示层: <%@ page language="java" import="java.util.*" pageEncodin ...

  2. 使用commons-fileupload-1.2.1.jar等组件实现文件上传

    使用的主要jar包:commons-io-1.3.2.jar包;commons-fileupload-1.2.1.jar包:commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前 ...

  3. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  4. jsp实现文件上传(二)用cos组件实现文件上传

    jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <hea ...

  5. MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传

    本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件 ...

  6. Commons组件实现文件上传与下载

    一.文件上传 所需jar包 首先是commons-fileupload.jar包 其次是commons-IO.jar包 前者的使用依赖后者,两者缺一不可 实现 前台要求 在前台提交的form表单请求方 ...

  7. dwz+jquery+fileupload+springmvc实现文件上传 及图片预览

    1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...

  8. 百度Web Uploader组件实现文件上传(一)

    Web Uploader WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势 ...

  9. Java使用Commons-FileUpload组件实现文件上传最佳方案

    学习的目标 使用commons-fileupload实现文件上传 使用commons-fileupload封装文件上传工具类   什么是commons-fileupload? The CommonsF ...

  10. 百度Web Uploader组件实现文件上传之分片上传(一)

    当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件.另外分片传输能够更加实时的跟踪上传进度.多的不说了直接怼代码 前端是三个监听:一个是获取md5,一个是分片,最后一个是合并代码 <! ...

随机推荐

  1. [dpdk] 读开发指南(1)

    该文档是随着对于文档的阅读进度,不断增加的阅读笔记.主要内容以大纲为主,以及记录帮助记忆的内容. 在之后的实际应用中,也不随着不断的深入理解,逐渐丰富各大纲下面的内容. 1. 前期准备:设置两个环境变 ...

  2. 如何在外网中访问自己在另一个局域网中的某个机器(SSH为例)

    UBUNTU 14.04 LTS 为例 如何在外网中访问自己在另一个局域网中的某个机器(SSH为例) 2013-05-01 16:02 2693人阅读 评论(0) 收藏 举报 情景描述: 计算机C1放 ...

  3. iftop ifstat

    ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...

  4. 位与(&)常用编程技巧

    补充知识:1)正整数的补码与原码相同:                2)求负整数的补码:原码 符号位不变,数值位各位取反,最后整个数加1得到补码:                3)按位与& ...

  5. ArcGIS中添加进自定义的ttf字符标记符号

    原文:ArcGIS中添加进自定义的ttf字符标记符号 ArcGIS系统中的样式可能不能满足实际生产需要,为了实现快速制图,可自定义一些样式,以便重复利用. 1.   制作的符号库 使用 FontCre ...

  6. ArcGIS API for Silverlight代码中使用Template模板

    原文:ArcGIS API for Silverlight代码中使用Template模板 在项目开发中,会遇到点选中聚焦闪烁效果,但是因为在使用Symbol的时候,会设置一定的OffSetX和OffS ...

  7. 【转】android Graphics(四):canvas变换与操作

    android Graphics(四):canvas变换与操作 分类: 5.andriod开发2014-09-05 15:05 5877人阅读 评论(18) 收藏 举报   目录(?)[+]   前言 ...

  8. http请求及模拟浏览器发送http请求

    /**    *测试新增图片   * @throws IOException    * @throws HttpException    * @throws SAXException    * @th ...

  9. synzhronized原理3

    1.java中的每个对象都可作为锁,有三种表现形式: 对于普通方法,锁的是当前this对象. 对于静态方法,锁的是class对象 对于方法块,锁的是synchronized指定的对象. 2.JVM基于 ...

  10. How to delete expired archive log files using rman?

    he following commands will helpful to delete the expired archive log files using Oracle Recovery Man ...