JAVA中文件下载和文件批量下载方法

需求:

支持文件批量下载。现在有很多小图片需要批量下载,不希望在服务器打包下载。

支持大文件断点下载。比如下载10G的文件。

PC端全平台支持。Windows,macOS,Linux

全浏览器支持。ie6,ie7,ie8,ie9,ie10,ie11,edge,firefox,chrome,safari

支持文件夹结构下载。不希望在服务器打包,而是直接下载文件夹,下载后在本地文件夹结构和服务器保持一致。

支持从URL中下载文件。

支持JSON数据结构。

 

JAVA中的文件下载:

/**

文件下载

* @param request

* @param response

* @param filePath 文件路径

* @param filename 下载时文件名称

*/

publicstaticvoid downLoadFile(HttpServletRequest request, HttpServletResponse response, String filePath, String filename){

    try{

        File file =new File(filePath);

        // 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称 用于浏览器的下载框中自动显示的文件名

        String userAgent = request.getHeader(“User-Agent”);

        if(userAgent.contains(“MSIE”)|| userAgent.contains(“Trident”)){

            filename = java.net.URLEncoder.encode(filename,“UTF-8”);

        }else{

            filename =new String(filename.getBytes(“utf-8”),“iso8859-1”);

        }

        response.addHeader(“Content-Disposition”,“attachment;filename=”+ filename);

        //response.setContentType(“application/vnd.ms-excel”);

        response.setContentType(“multipart/form-data”);

        byte[] b =newbyte[1024];

        int len = 0;

        FileInputStream fs =new FileInputStream(file);

        PrintWriter writer = response.getWriter();

        while((len = fs.read())!=1){

            writer.write(len);

        }

        fs.close();

        writer.close();

    }catch(FileNotFoundException e){

        // TODO Auto-generated catch block

        e.printStackTrace();

    }catch(IOException e){

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}

 

JAVA中批量下载文件,将下载多个文件打包成zip文件下载。

//批量文件下载(将多个文件打包成zip包下载)

publicstaticvoid batchDownLoadFile(HttpServletRequest request, HttpServletResponse response, String filename, String[] filepath, String[] documentname, String loginname){

    byte[] buffer =newbyte[1024];

    Date date =new Date();

    //生成zip文件存放位置

    String strZipPath = Constant.exportAddress + loginname + date.getTime()+“.zip”;

    File file =new File(Constant.exportAddress);

    if(!file.isDirectory()&&!file.exists()){

        //创建单层目录

        // f.mkdir();

        // 创建多层目录

        file.mkdirs();

    }

    try{

        ZipOutputStream out=new ZipOutputStream(new FileOutputStream(strZipPath));

        // 需要同时下载的多个文件

        for(int i = 0; i < filepath.length; i++){

            File f =new File(filepath[i]);

            FileInputStream fis =new FileInputStream(f);

            System.out.println(documentname[i]);

            out.putNextEntry(new ZipEntry(documentname[i]));

            //设置压缩文件内的字符编码,不然会变成乱码

            out.setEncoding(“GBK”);

            int len;

            // 读入需要下载的文件的内容,打包到zip文件

            while((len = fis.read(buffer))> 0){

                out.write(buffer, 0, len);

            }

            out.closeEntry();

            fis.close();

        }

        out.close();

        PublicMethod.downLoadFile(request, response, strZipPath, filename +“.zip”);

        File temp =new File(strZipPath);

        if(temp.exists()){

            temp.delete();

        }

    }catch(Exception e){

        System.out.println(文件下载错误”);

    }

}

 

在JS中批量下载,不需要打包

$(“#btn-down-files”).click(function (){

    if(downer.Config[“Folder”]==“”){ downer.open_folder();return;}

    var urls =[

        { fileUrl:http://res2.ncmem.com/res/images/ie11.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/up6.1/down.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/firefox.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/edge.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/up6.1/cloud.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/home/w.png}

        ,{ fileUrl:http://res2.ncmem.com/res/images/img.png}

    ];

    downer.app.addUrls(urls);

});

 

效果如下:

网上例子:http://blog.ncmem.com/wordpress/2019/08/28/java批量下载/