使用apache-fileupload处理文件上传与上传多个文件 二(59)

一 使用apache-fileupload处理文件上传

框架:是指将用户经常处理的业务进行一个代码封装。让用户可以方便的调用。

目前文件上传的(框架)组件:

Apache----fileupload -

Orialiy – COS – 2008() -

Jsp-smart-upload – 200M。

用fileupload上传文件:

需要导入第三方包:

Apache-fileupload.jar – 文件上传核心包。

Apache-commons-io.jar – 这个包是fileupload的依赖包。同时又是一个工具包。

核心类:

DiskFileItemFactory – 设置磁盘空间,保存临时文件。只是一个具类。

ServletFileUpload  - 文件上传的核心类,此类接收request,并解析reqeust。

servletfileUpload.parseRequest(requdest)  - List<FileItem>

第一步:导入包

第二步:书写一个servlet完成doPost方法

/**

 * DiskFileItemFactory构造的两个参数

 * 第一个参数:sizeThreadHold - 设置缓存(内存)保存多少字节数据,默认为10K

 *            如果一个文件没有大于10K,则直接使用内存直接保存成文件就可以了。

 *          如果一个文件大于10K,就需要将文件先保存到临时目录中去。

 * 第二个参数 File 是指临时目录位置

 *

 */

public class Up2Servlet extends HttpServlet {

    public void doPost(HttpServletRequest req, HttpServletResponse resp)

           throws ServletException, IOException {

       req.setCharacterEncoding("UTf-8");

       //获取项目的路径

       String path = getServletContext().getRealPath("/up");

       //第一步声明diskfileitemfactory工厂类,用于在指的磁盘上设置一个临时目录

       DiskFileItemFactory disk =

              new DiskFileItemFactory(1024*10,new File("d:/a"));

       //第二步:声明ServletFileUpoload,接收上面的临时目录

       ServletFileUpload up = new ServletFileUpload(disk);

       //第三步:解析request

       try {

           List<FileItem> list =  up.parseRequest(req);

           //如果就一个文件

           FileItem file = list.get(0);

           //获取文件名,带路径

           String fileName = file.getName();

           fileName = fileName.substring(fileName.lastIndexOf("\\")+1);

           //获取文件的类型

           String fileType = file.getContentType();

           //获取文件的字节码

           InputStream in = file.getInputStream();

           //声明输出字节流

           OutputStream out = new FileOutputStream(path+"/"+fileName);

           //文件copy

           byte[] b = new byte[1024];

           int len = 0;

           while((len=in.read(b))!=-1){

              out.write(b,0,len);

           }

           out.close();

           long size = file.getInputStream().available();

           //删除上传的临时文件

           file.delete();

           //显示数据

           resp.setContentType("text/html;charset=UTf-8");

           PrintWriter op = resp.getWriter();

           op.print("文件上传成功<br/>文件名:"+fileName);

           op.print("<br/>文件类型:"+fileType);

           op.print("<br/>文件大小(bytes)"+size);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }
}

二 上传多个文件

第一步:修改页面的表单为多个input type=”file”

<form action="<c:url value=‘/Up3Servlet‘/>" method="post" enctype="multipart/form-data">
        File1:<input type="file" name="txt"><br/>
        File2:<input type="file" name="txt"><br/>
        <input type="submit"/>
    </form>

第二步:遍历list<fileitem>

public class Up3Servlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String path = getServletContext().getRealPath("/up");
        //声明disk
        DiskFileItemFactory disk = new DiskFileItemFactory();
        disk.setSizeThreshold(1024*1024);
        disk.setRepository(new File("d:/a"));
        //声明解析requst的servlet
        ServletFileUpload up = new ServletFileUpload(disk);
        try{
            //解析requst
            List<FileItem> list = up.parseRequest(request);
            //声明一个list<map>封装上传的文件的数据
            List<Map<String,String>> ups = new ArrayList<Map<String,String>>();
            for(FileItem file:list){
                Map<String,String> mm = new HashMap<String, String>();
                //获取文件名
                String fileName = file.getName();
                fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
                String fileType = file.getContentType();
                InputStream in = file.getInputStream();
                int size = in.available();
                //使用工具类
                FileUtils.copyInputStreamToFile(in,new File(path+"/"+fileName));
                mm.put("fileName",fileName);
                mm.put("fileType",fileType);
                mm.put("size",""+size);

                ups.add(mm);
                file.delete();
            }
            request.setAttribute("ups",ups);
            //转发
            request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);

        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
时间: 2024-10-12 19:42:08

使用apache-fileupload处理文件上传与上传多个文件 二(59)的相关文章

FileUpload控件如何获取要上传文件的路径

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BorrowPage.aspx.cs" Inherits="Borrow_BorrowPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T

使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹

在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? □ 在web.config中配置 1: <configuration> 2: <configSections> 3: ... 4: <section name="backload" type="Backload.Configuration.BackloadSection, Backload, Version=1.9.3.1, Culture=neutra

(转)ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器

上传文件有两个主要的目的地,一个是服务器,另一个是数据库,ASP.NET内置了FileUpload这个上传控件,文本框显示用户选择的文件的全名. 其属性主要包括: ContenLength:上传文件大小,单位:字节 FileName:文件名称 HasFile:是否选择了文件 例子:测试环境.net 2.0(内有详细说明) default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile=&q

ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器&lt;from Copying&gt;

2009-02-15 11:52:54|  分类: 默认分类 |  标签: |举报 |字号大中小 订阅 ASP.NET(C#)FileUpload实现上传限定类型和大小的文件到服务器 2009-01-07 23:29 上传文件有两个主要的目的地,一个是服务器,另一个是数据库,ASP.NET内置了FileUpload这个上传控件,文本框显示用户选择的文件的全名. 其属性主要包括: ContenLength:上传文件大小,单位:字节 FileName:文件名称 HasFile:是否选择了文件 例子:

Struts2文件上传(基于表单的文件上传)

•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-FileUpload组件特点 –使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能 –能够全程控制上传内容 –能够对上传文件的大小.类型进行控制 •需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包): –http://jak

导出EXCEL上传 服务器 添加压缩包,获取文件 大小

package net.joystart.excelTask; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.DateFormat; import ja

文件或资源的上传和下载

1.文件的上传 [1] 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. [2] 表单的设置 > 向服务器上传一个文件时,表单要使用post请求. > 表单的默认属性enctype="application/x-www-form-urlencoded" - 这个属性的意思是请求体中的内容将会使用URL编码 > 上传文件的表单enctype需要设置为 multipart/form-data - multi

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

使用swfupload上传超过30M文件,使用FLASH上传组件

原文:使用swfupload上传超过30M文件,使用FLASH上传组件 前一段时间会员的上传组件改用FLASH的swfupload来上传,既能很友好的显示上传进度,又能完全满足大文件的上传. 后来服务器升级到windows 2008,改为IIS7后,上传文件一旦超过30M时,就出现404错误,而且是是上传进度达到100%之后,真是让人难思其解. 反复测试,发现FLASH上传文件到并没有正确的执行.NET程序,也就是.NET程序本身有问题; 但小于30M又是一切OK,难道是上传的文件大小有所限制?

【Struts2】文件的上传与上传权限的控制

很多关于Struts2的文章,对此都有详细的介绍,但是里面的示例的程序写得很糟糕.各种无意义的拦截器技术.国际化技术.初始化参数,把原本简单的程序弄得很繁琐.同时,部分关键的代码没有写.导致每次上传Tomcat都报Unable to find 'struts.multipart.saveDir' property setting.的警告.然后上传大点的文件,整个Web工程就崩溃,然后后台抛出大段的File Upload BaseSize Limit Exceeded Exception异常,刷爆