实现文件上传需要引入:
  • 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. javascript动画效果之缓冲动画(修改版)

    在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one ...

  2. mysql表备份及还原

    备份 导出数据库所有表结构 ? 1 mysqldump -uroot -ppassword -d dbname > db.sql 导出数据库某个表结构 ? 1 mysqldump -uroot ...

  3. yii2.0使用ActionForm创建表单

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  4. Mongodb 抛出异常:dbexit: really exiting now

    删除 数据库文件夹下,的 _tmp 和 mongodb.lock 文件 , 重启即可.我的数据文件在  /data/mongo/data/  下

  5. Android:关于服务的总结

    服务 startService(intent) stopService(intent) 服务的生命周期 如果采用start的方式开启服务 oncreate()--->onstartcommand ...

  6. POJ 2516 Minimum Cost

    每个物品分开做最小费用最大流. #include<cstdio> #include<cstring> #include<cmath> #include<vec ...

  7. iostextField文本框基本使用

    (1)可以根据需要设置文本框的样式(包括形状.边框颜色.背景等). (2)可以根据需要设置文字显示样式(包括输入密码时的密文显示.文字横向居中.纵向居中上下.输入的文字是否首席木大写.文字超过后是否缩 ...

  8. 《Windows驱动开发技术详解》之驱动程序的基本结构

    驱动对象 每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候被内核中的对象管理程序所创建的.驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并 ...

  9. 《Windows驱动开发技术详解》之HelloDDK

    编写如下代码:

  10. VC MFC工具栏(CToolBar)控件

    一.工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创 ...