Servlet文件上传与下载


 组件使用: 
    1,下载组件,引入jar  
     commons-fileupload-1.2.1.jar 
     commous-io-1.4.jar 
     2,配置xml 
     3,Api学习 


前台:
1. 提交方式:post
2. 表单中有文件上传的表单项: <input type=”file” />
3. 指定表单类型:
默认类型:enctype="application/x-www-form-urlencoded"
文件上传类型:multipart/form-data 

 <form action="${pageContext.request.contextPath }/FileUpload" method="post" enctype="multipart/form-data"> 
   文件     <input type="file" name="file1"><br/>   
public void upload(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

          //1.创建文件上传工厂类  
          DiskFileItemFactory fac =  new DiskFileItemFactory();
          //2.创建文件上传核心类对象  
          ServletFileUpload upload =  new ServletFileUpload(fac); 
                 //设置单个文件最大为30m
              upload.setFileSizeMax(30*1024*1024);  
                 //设置总文件最大60M
              upload.setSizeMax(60*1024*1024);
          //3.判断表单是否为文件上传表单 
               if(upload.isMultipartContent(request)){ 
                    //把请求转换成FileItem 
                      try {
                        List<FileItem> items = upload.parseRequest(request); 
                             //遍历items 
                         for(FileItem item : items){ 
                               //判断普通填表元素还是文件元素 
                             if(item.isFormField()){
                                    //获取元素名称 
                                     String filedName    = item.getFieldName(); 
                                     //获取值 
                                     String value  = item.getString("UTF-8"); 
                                     System.out.println(filedName+":"+value);
                             }else{
                                  // 处理文件上传 
                                   //获取文件名 
                                String name =  item.getName();    
                                name=new String(name.getBytes(),"utf-8");
                                // ----处理上传文件名重名问题----
                                // a1. 先得到唯一标记
                                String id = UUID.randomUUID().toString();
                                // a2. 拼接文件名
                                name = id + "#" + name;   


                                   //获取上传文件目录
                                String basePath = getServletContext().getRealPath("/upload"); 
                                //创建文件对象 
                                    File file = new File(basePath,name); 
                                    try {
                                        item.write(file); 
                                        item.delete();  // 删除组件运行时产生的临时文件
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                             }

                         }
                    } catch (FileUploadException e) {
                        e.printStackTrace();
                    }


               }else{ 
                   System.out.println("不处理");
               }

    }


 private void down(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        //获取用户下载文件的名字 
        String fileName = request.getParameter("fileName");
       //将名字转换到utf-8 
          fileName =  new String(fileName.getBytes("ISO8859-1"),"UTF-8");
       // 先获取上传目录路径
            String basePath = getServletContext().getRealPath("/upload"); 
            // 获取一个文件流
            InputStream in = new FileInputStream(new File(basePath,fileName)); 
            // 如果文件名是中文,需要进行url编码
            fileName = URLEncoder.encode(fileName, "UTF-8"); 
            // 设置下载的响应头
            response.setHeader("content-disposition", "attachment;fileName=" + fileName); 
            // 获取response字节流
            OutputStream out = response.getOutputStream(); 
            byte[] b = new byte[1024];
            int len = -1;
            while ((len = in.read(b)) != -1){
                out.write(b, 0, len);
            }
            // 关闭
            out.close();
            in.close();

    }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值