你的位置:首页 > Java教程

[Java教程]使用apache


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