码迷,mamicode.com
首页 > Web开发 > 详细

9 文件上传和下载

时间:2018-02-12 15:21:57      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:return   header   utils   jar   ade   text   检查   tty   文件下载   

1.文件上传

      1.修改表单的enctype: <form action="" method="post"         enctype="multipart/form-data">
   修改后servlet就不能通过req.getParameter("参数名")接受请求参数了
      2.导入jar包:
        commons-fileupload-1.2.2.jar
    commons-io-1.4.jar
      3.检查method和contentType
            boolean isMultipart=ServletFileUpload.isMultipartContent(req);
        if(!isMultipart){
             return;
          }
      4.创建处理FileItem的工厂对象
      FileItemFactory factory=new DiskFileItemFactory();
      创建处理文件上传的处理器对象
       ServletFileUpload upload=new ServletFileUpload(factory);
       解析请求对象
       List<FileItem> items=upload.parseRequest(req);
       for(FileItem fileItem:items){
           String fieldName=fileItem.getFiledName();
       if(fileItem.isFormField()){
                 String fileName=fileItem.getString("utf-8");
       }else{
           String fileName=fileItem.getName();
           String contentType=fileItem.getContentType();
           String realPath=super.getServltContext().getRealPath("/upload");
           fileItem.write(new File(realPath+"/"+fileName));
       }
       }
       5.文件名处理
       使用UUID当做文件名称
       String uuid=UUID.randomUUID().toString();
       String extension=FilenameUtils.getExtension(fileName);
       fileName=uuid+"."extension;
       6.缓存大小和临时目录
         设置缓存大小:
        factory.setSizeThreshold(500*1024);
     设置临时目录:
        factory.setRepository(new File(""));

2.使用注解上传文件

  @MultipartConfig
     可以通过req.getParamter()接受参数
 接受上传文件
  Part part=req.getPart("");
  part.write(realPath+"/"+name);

3.文件下载

  接受请求参数:
      String fileName=req.getParameter("fileName");
  fileName=new String(fileName.getBytes("ISO-8859-1"),"utf-8");
 找到资源的位置,读取到内存,响应给浏览器:
      String realPath=super.getServletContext().getRealPath("");
  String filePath=realPath+"\\"+fileName;

  ServletOutputStream out=resp.getOutputStream();
  //设置响应头
   resp.setContenType("application/x-msdownload");
 //获取请求头信息Use-Agent
     String userAgent=req.getHeader("User-Agent");
 if(userAgent.contain("MSIE")){
    //IE
    fileName=URLEncoder.encode(fileName,"utf-8");
 }else{
 //W3C
    fileName=new String(fileName.getBytes("utf-8"),"ISO-8859-1");
 }
 //设置下载的文件名称
 resp.setHeader("Content-Disposition","attachment;fileName="+fileName);
 //将数据响应到浏览器
 Files.copy(Paths.get(filePath),out);

9 文件上传和下载

标签:return   header   utils   jar   ade   text   检查   tty   文件下载   

原文地址:http://blog.51cto.com/10913595/2071340

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!