需要用到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. BlueDroid代码分析之GKI

    目录 1. 概述 2. 线程 2.1 主要函数 2.2 功能 3. 事件 3.1 主要函数 3.2 功能 1. 概述 GKI以库libbt-brcm_gki.so(Static Lib?)的形式提供给 ...

  2. PIVOT&UNPIVOT

    如果是家电销售员,那么可能需要统计每月日销售的彩电.冰箱.空调...最大值.最小值.平均值等 如果你是耳鼻喉科医生,那么可能需要统计月度年度日接客咽炎.喉炎.鼻炎...最大值.最小值.平均值等 如果你 ...

  3. CSS3新添加的选择器

    ---条件选择器:--- .ccc[cusid*= value] { backgroud-color:#0094ff; } //表示使用了class="ccc"元素自定义属性cus ...

  4. [LeetCode] Simplify Path(可以不用看)

    Given an absolute path for a file (Unix-style), simplify it. For example, path = "/home/", ...

  5. [LeetCode]题解(python):101 Symmetric tree

    题目来源 https://leetcode.com/problems/symmetric-tree/ Given a binary tree, check whether it is a mirror ...

  6. PMP--可能会涉及到的计算题

    一.进度管理里的历时三点估算历时的三点估算可能会出现在进度管理的计算题里.以下公式,大家要记住:说一下历时的三点估算中的几个值:1.最有可能的历时估算:Tm2.最乐观的历时估算: To3.最悲观的历时 ...

  7. 利用DBMS_ROWID.ROWID_CREATE来找出事务等待的行数据

    在v$session视图中有四个字段,如下: Wait information in v$session view ROW_WAIT_OBJ# NUMBER Object ID for the tab ...

  8. C语言:通过指针对数组元素进行排序

    // //  main.c //  Pointer_array // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All ...

  9. windows系统下利用MySql命令行进入MySql数据库

    Enter password: ****

  10. ios之无限 自动 图片轮播器的实现

    比较之前发布的手动无限图片轮播器进行了改进.实现了自动无限轮播的功能.比较适合团购标题分类下面的轮播器功能. 实现思路: * 开启一个定时器,把操作放入消息循环池.每隔一定时间,操作执行一次. * 注 ...