实现文件上传需要引入:
  • commons-fileupload-1.3.2.jar
  • commons-io-2.5.jar
  • commons-logging-1.2.jar

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="UTF-8">
 <title>Insert title here</title>
 </head>
 <body>
     <form action="upload" method="post" enctype= "multipart/form-data">
         <input type="text" name="username"/><br/>
         <input type="password" name="passwd" ><br/>
         <input type="file" name="file">    <br/>
         <input type="submit">
     </form>
 </body>
 </html>
  • enctype= "multipart/form-data" 是实现文件上传必不可缺少的属性,但是加了此属性之后,就不能以 request.getParameter(arg0); 来获取表单值,只能通过getFieldName()获取表单名,getString()获取表单值。
if(items.isFormField()){
            if("des".equals(items.getFieldName())){
                        fileDesc1=new String(items.getString().getBytes("iso-8859-1"),"UTF-8");

                      }
  • 用户上传文件之后,通过表单的action属性发送到相应的servlet进行处理,我们在得到用户提交的数据之后,把用户数据分为两种: 1.普通文本数据 2.文件 对于文件数据我们要进行特别的处理才能正常使用。
  1. 我们通过创建磁盘文件工厂的对象DiskFileItemFactory来设置文件的临界值(超过这个临界值就需要通过临时文件来作为缓冲)和临时目录以及上传文件保存目录等等。
DiskFileItemFactory diff=new DiskFileItemFactory();
  diff.setSizeThreshold(10*1024*1024);
  diff.setRepository(new File(this.getServletContext().getRealPath("tmp"))); 

  2.    然后设置文件上传对象ServletFileUpload,并把文件工厂的对象添加进来。

ServletFileUpload sfu=new ServletFileUpload(diff);

  3.    接下来我们需要对文件进行解析。fileUpload.parseRequest()用于解析文件请求,并返回一个List<FileItem>类。FileItem类用来封装单个表单字段元素的数据,一个表单元素对应一个对象(表单元素是允许用户在表单中(比如:文本域,下拉列表,单选框,复选框等等)输入信息的元素)。

List<FileItem> item=null;
    try {
            item=fileUpload.parseRequest(request);
                for(FileItem items:item){
                if(items.isFormField()){  //为普通表单

                    if("des".equals(items.getFieldName())){  //表单
                        fileDesc1=new   String(items.getString().getBytes("iso-8859-1"),"UTF-8");
                    }
                }else{    //为表单中的文件
                    String uppath=this.getServletContext().getRealPath("upload");    //获得上传文件夹路径
                 FileOutputStream fos=new FileOutputStream(uppath+"/"+items.getName());    //文件输出流,流向文件而不是文件夹

                    fileDesc=items.getName();   

                    if(items.isInMemory()){     //小于10M,直接写到上传文件夹
                        fos.write(items.get());    //往流里写内容,流入文件
                    }else{    //大于10M,先上传到临时文件夹tmp中
                        IOUtils.copy(items.getInputStream(), fos);    //将输入流的内容复制到输出流,流入文件
                    }
                    fos.close();
                }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

利用apache组件实现文件上传的更多相关文章

  1. (八)利用apache组件进行文件上传下载

    一.文件上传 文件上传,即服务器端得到并处理用户上传的文件,这个文件存放在request里,也就是需要对request进行处理. 1.1 编写html文件 <!DOCTYPE html> ...

  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. 模拟文件上传(二):使用apache fileupload组件进行文件上传

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

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

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

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

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

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

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

  9. 【java】[文件上传jar包]commons-fileUpload组件解决文件上传(文件名)乱码问题

    response.setContentType("text/html; charset=UTF-8");  Boolean isMultipart = ServletFileUpl ...

随机推荐

  1. CodeForces 577C Vasya and Petya's Game 数学

    题意就是给你一个1到n的范围 你每次可以问这个数是否可以被某一个数整除 问你要猜多少数才能确定这个数…… 一开始一点思路也没有 后来查了一下才知道 每个数都可以分为几个质数的整数次幂相乘得到…… #i ...

  2. C++ 中 delete 和 delete[] 的区别

    一直对 C++ 中 delete 和 delete[] 的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++ 告诉我们在回收用 new 分配的单个对象的内存空间时用 de ...

  3. .Net_把文件数据添加到数据库中(面试题)

    一个文本文件含有如下内容: 4580616022644994|3000|赵涛 4580616022645017|6000|张屹 4580616022645090|3200|郑欣夏 上述文件每行为一个转 ...

  4. Centos6.6安装Nginx

    1.在安装nginx之前,需要先安装该模块需要依赖包 yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel 2.安 ...

  5. HDU 3410 Passing the Message

    可以先处理出每个a[i]最左和最右能到达的位置,L[i],和R[i].然后就只要询问区间[ L[i],i-1 ]和区间[ i+1,R[i] ]最大值位置即可. #include<cstdio&g ...

  6. NEU OJ 1649 GMZ’s Pretty Number

    先来一次线性素数筛,把1到10000000的素数都筛选出来,然后暴力跑一遍所有可能的值,打个表,查询的时候o(1)效率出解. #include<cstdio> #include<cs ...

  7. 如何在MFC中启动其它的(.exe)可执行文件

    ShellExecute(NULL,   "open",   "http://www.sina.com.cn",   NULL,   NULL,   SW_SH ...

  8. mysql 注册登陆表单并且操纵元素

    <?php      error_reporting(E_ALL^E_DEPRECATED^E_NOTICE);    header("content-type:text/html;c ...

  9. hdu_5776_sum(前缀和维护)

    题目链接:hdu_5776_sum 题意: 给你一串数,问你是否有一个连续的子序列的和为m的倍数 题解: 维护一个前缀和%m的值,如果前缀和%m的值为0或者有两个前缀和%m的值相同,那么就有一个连续区 ...

  10. C#连接Oracle的方法

    C#连接Oracle的方法 方法1: System.Data.OracleClient oracleConnectionString : data source = orcl;user id= sco ...