zoukankan      html  css  js  c++  java
  • java下载文件工具类

    java下载文件工具类

    package com.skjd.util;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import javax.servlet.http.HttpServletResponse;
    
    public class DownloadUtils {
        /**
         * 根据网络url下载文件
         * 下载到指定文件
         * @throws MalformedURLException 
         */
        public static void DownloadByUrlToFile(String urlPath,String filename2) throws Exception{        
            URL url = new URL(urlPath);
    /*        //文件后缀名
            String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1);
            //文件名
            String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf("."));*/
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();      
            int code = conn.getResponseCode();
            if (code != HttpURLConnection.HTTP_OK) {
                throw new Exception("文件读取失败");
            }
            InputStream fis = new BufferedInputStream(conn.getInputStream());
            File file = new File(filename2);
            OutputStream toClient = new BufferedOutputStream(new FileOutputStream(file));
            // 以流的形式下载文件。
            byte[] buffer = new byte[1024*8];  
            int read=0;
            //如果没有数据了会返回-1;如果还有会返回数据的长度
            while ((read = fis.read(buffer))!=-1) {
                //读取多少输出多少
                toClient.write(buffer,0,read);
            }    
            toClient.flush();
            toClient.close();
            fis.close();        
        }
         /**
         * 根据网络url下载文件
         * 直接返回给浏览器
         * @throws MalformedURLException 
         */
        public static void DownloadByUrl(String urlPath,HttpServletResponse response) throws Exception{        
             URL url = new URL(urlPath);
             //文件后缀名
             String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1);
             //文件名
             String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf("."));
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();      
            int code = conn.getResponseCode();
            if (code != HttpURLConnection.HTTP_OK) {
                throw new Exception("文件读取失败");
            }
            InputStream fis = new BufferedInputStream(conn.getInputStream());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" +filename+"."+str); 
            response.setContentType("application/octet-stream");  
            // 以流的形式下载文件。
            byte[] buffer = new byte[1024*8];  
            int read=0;
            //如果没有数据了会返回-1;如果还有会返回数据的长度
            while ((read = fis.read(buffer))!=-1) {
                //读取多少输出多少
                toClient.write(buffer,0,read);
              }    
            toClient.flush();
            toClient.close();
            fis.close();
          
          
            
        }
    }

    使用案例代码

    /**
         * 导出购票码
         */
        @RequestMapping(value="/getAllCode")
        public void getAllCode(HttpServletResponse response){
            PageData pd = new PageData();
            pd = this.getPageData();
            try {
                List<PageData> list = driverService.listAll(pd);
                   //获取当前项目的绝对路径
                String realPath = this.getRequest().getSession().getServletContext().getRealPath("/");
                File file = new File(realPath+"/codes/");
                //判断是否存在这个文件夹,如果不存在则重新创建一个文件
                if(!file.exists()){
                    file.mkdirs();
                }
                String url2="";
                List<PageData> list3 = dictionariesService.getIMGUrl(null);
                for(int i=0;i<list3.size();i++){
                    if(String.valueOf(list3.get(i).get("remarks")).length()>6){
                        url2=String.valueOf(list3.get(i).get("remarks"));
                    }
                }
                for(int i=0;i<list.size();i++){
                      if(list.get(i).get("code_url")!=null&&!"".equals(String.valueOf(list.get(i).get("code_url")))){
                          DownloadUtils.DownloadByUrlToFile(url2+String.valueOf(list.get(i).get("code_url")),realPath+"/codes/"+String.valueOf(list.get(i).get("idcode"))+".png");
                      }               
                }
                FileZip.zip(realPath+"/codes/", realPath+"/codes.zip");
                InputStream fis = new BufferedInputStream(new FileInputStream(new File(realPath+"/codes.zip")));
                OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                Cookie cookie = new Cookie("abcd", "123");
                 cookie.setPath("/");
                 response.addCookie(cookie);
                // 设置response的Header
                response.setContentType("application/zip");// 指明response的返回对象是文件流
                response.setHeader("content-Disposition", "attachment;filename=codes.zip");// 设置在下载框默认显示的文件名
                // 以流的形式下载文件。
                byte[] buffer = new byte[1024*8];  
                int read=0;
                //如果没有数据了会返回-1;如果还有会返回数据的长度
                while ((read = fis.read(buffer))!=-1) {
                    //读取多少输出多少
                    toClient.write(buffer,0,read);
                }          
                 toClient.flush();
                 toClient.close();
                 fis.close();
                 
             
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    public static void downLoadFile(HttpServletResponse response, String filePath) throws IOException {
            File file = new File(filePath);
            downLoadFile(response,file);
        }
    
        public static void downLoadFile(HttpServletResponse response,File file) throws IOException {
            if (file.exists()) {
                response.setContentType("application/force-download");
                response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
                byte[] buffer = new byte[1024];
                try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis)) {
                    OutputStream os = response.getOutputStream();
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                    fis.close();
                    os.close();
                }
            }
        }
    
        public static void downLoadFile(HttpServletResponse response,InputStream fis,String fileName) throws IOException {
            response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
                byte[] buffer = new byte[1024];
                try (
                     BufferedInputStream bis = new BufferedInputStream(fis)) {
                    OutputStream os = response.getOutputStream();
                    int i = bis.read(buffer);
                    while (i != -1) {
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                }
            fis.close();
        }
  • 相关阅读:
    最强神作!Crysis深度剖析与优化指南(1825)
    到底什么样的一款游戏就算全3D?
    [转贴]因父之名:一个“非科班”的成长史
    转载《阅读一款3D引擎的方法备忘》
    魔兽世界角色换装
    Flash游戏开发之按键控制(复合键,八方向键)
    通过MC里的按钮跳转场景
    Cuyahoga 的安装
    如何从数组中随机取出多个不重复的项
    [Flash开发笔记] flash 8 中的 setTimeout()
  • 原文地址:https://www.cnblogs.com/qq376324789/p/10862997.html
Copyright © 2011-2022 走看看