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

一 使用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();
        }
    }
}

 

 

 

posted @ 2015-05-16 16:19  hongxinerke  阅读(1499)  评论(0编辑  收藏  举报