精华内容
下载资源
问答
  • filename=" + java.net.URLEncoder.encode(fileName, "UTF-8") + ".zip"); outputStream = response.getOutputStream(); outputStream.write(data); 致使还没自动关闭ZipOutputStream 流就已经输出了, 所以我们...

    网上找到的问题原因是:ZipOutputStream的流没有关闭

    其实说的也没错,但是我们都知道现在的java是可以自动关闭的,如下:

    try(

    ZipOutputStream zos = new ZipOutputStream(fileOutputStream)

    ){}

     

    尽管如此,还是会报该错误,原因就在于这个关闭流的时机是在整体try执行完之后关闭,而我们一般会在try里面直接写respones的返回流信息

    response.setContentType("application/octet-stream");
    response.addHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(fileName, "UTF-8") + ".zip");
    outputStream = response.getOutputStream();
    outputStream.write(data);
    

    致使还没自动关闭ZipOutputStream 流就已经输出了,所以我们要在返回respones之前手动关闭ZipOutputStream的流

    展开全文
  • Java 下载zip文件

    千次阅读 2019-12-05 16:36:55
    选中文件zip下载 前台:文件列表,选中文件,传文件ID集合传到后台 后台: //接受到文件ID集合,查询出文件urlList List attachFileList = bookService.findAttachFileList(ids); List strFiles = new ArrayList...

    选中文件打zip包下载

    前台:文件列表,选中文件,传文件ID集合传到后台

    后台:

    //接受到文件ID集合,查询出文件urlList

    List attachFileList = bookService.findAttachFileList(ids);

    List strFiles = new ArrayList();

    for(AttachFile attachFile : attachFileList){

    strFiles.add(attachFile.getAttachFileUrl());

    }

    //调用打包工具类进行下载

    ZipUtil.ZipFiles(getRequest(), getResponse(), strFiles, UUID.randomUUID().toString()+".zip");

    直接下载zip包 zipUtil也有

    /zipUtil ↓↓↓

    package com.jk.book.util;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.List;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.tools.zip.ZipEntry;

    import org.apache.tools.zip.ZipOutputStream;

    public class ZipUtil {

    /**

    • 把文件打成压缩包并保存在本地硬盘

    • @param srcfile

    • @param zipPath

    */

    public static void ZipFiles(List srcfiles, String zipPath) {

    byte[] buf = new byte[4096];
    
    ZipOutputStream out = null;
    
    try {
    
      // 创建zip输出流
    
      out = new ZipOutputStream(new FileOutputStream(zipPath));
    
      // 循环将源文件列表添加到zip文件中
    
      for (int i = 0; i < srcfiles.size(); i++) {
    
    File file = new File(srcfiles.get(i));
    
        FileInputStream in = new FileInputStream(file);
    
        String fileName = file.getName();
    
        // 将文件名作为zip的Entry存入zip文件中
    
        out.putNextEntry(new ZipEntry(fileName));
    
        int len;
    
        while ( (len = in.read(buf)) > 0) {
    
          out.write(buf, 0, len);
    
        }
    
        out.closeEntry();
    
        in.close();
    
      }
    
    }
    
    catch (IOException e) {
    
      e.printStackTrace();
    
    } finally {
    
    if (null != out) {
    
    try {
    

    out.close();

    out = null;

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }
    
    }
    

    }

    /**

    • 把文件打成压缩包并输出到客户端浏览器中

    • @param request

    • @param response

    • @param srcFiles

    • @param downloadZipFileName

    */

    public static void ZipFiles(HttpServletRequest request, HttpServletResponse response, List srcFiles, String downloadZipFileName) {

    byte[] buf = new byte[4096];
    
    try {
    
      // Create the ZIP file
    
    // ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
    
    ZipOutputStream out = new ZipOutputStream(response.getOutputStream());//--设置成这样可以不用保存在本地,再输出, 通过response流输出,直接输出到客户端浏览器中。
    
      // Compress the files
    
    if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
    
    downloadZipFileName = new String(downloadZipFileName.getBytes("GB2312"),"ISO-8859-1");
    
        } else {
    
        // 对文件名进行编码处理中文问题
    
        downloadZipFileName = java.net.URLEncoder.encode(downloadZipFileName, "UTF-8");// 处理中文文件名的问题
    
        downloadZipFileName = new String(downloadZipFileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题
    
        }
    
    response.reset(); // 重点突出
    
        response.setCharacterEncoding("UTF-8"); // 重点突出
    
        response.setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型 // 重点突出
    
        // inline在浏览器中直接显示,不提示用户下载
    
        // attachment弹出对话框,提示用户进行下载保存本地
    
        // 默认为inline方式
    
        response.setHeader("Content-Disposition", "attachment;filename="+downloadZipFileName);
    
      for (int i = 0; i < srcFiles.size(); i++) {
    
    File file = new File(srcFiles.get(i));
    
        FileInputStream in = new FileInputStream(file);
    
        // Add ZIP entry to output stream.
    
        String fileName = file.getName();
    
        out.putNextEntry(new ZipEntry(fileName));
    
        // Transfer bytes from the file to the ZIP file
    
        int len;
    
        while ( (len = in.read(buf)) > 0) {
    
          out.write(buf, 0, len);
    
        }
    
        // Complete the entry
    
        out.closeEntry();
    
        in.close();
    
      }
    
      // Complete the ZIP file
    
      out.close();
    
      System.out.println("压缩完成.");
    
    }
    
    catch (IOException e) {
    
      e.printStackTrace();
    
    }
    

    }

    public static void main(String[] args) {

    List srcFiles = new ArrayList();

    srcFiles.add(“c:/codetemplates.xml”);

    srcFiles.add(“d:/t1.png”);

    ZipFiles(srcFiles, “c:/mm.zip”);

    }

    }

    转载于:www.iqilun.com

    展开全文
  • php下载zip文件到本地

    千次阅读 2018-09-30 15:18:31
    * 功能:压缩文件下载函数 * files: 需要压缩的文件,destination:压缩包名,overwrite:是否使用覆盖创建 * 注意:要求php5.0+ zip扩展1.7.0+ */ function create_zip($files = array(),$destination = '',...

    看代码

    /**
     * 功能:压缩文件并下载函数
     * files: 需要压缩的文件,destination:压缩包名,overwrite:是否使用覆盖创建
     * 注意:要求php5.0+  zip扩展1.7.0+
     */
    function create_zip($files = array(),$destination = '',$overwrite = false) {
    	//判断文件夹是否已存在且覆盖创建为否
    	if(file_exists($destination) && !$overwrite) { 
    		return false; 
    	}
    
    	$valid_files = array();
    	//安全处理
    	if(is_array($files)) {
    		foreach($files as $file) {
    			//确认文件是否存在
    			if(file_exists($file)) {
    				$valid_files[] = $file;
    			}
    		}
    	}
    	//得到要压缩的文件后
    	if(count($valid_files)) {
    		//使用zip函数,如果zip已存在就覆盖打开,不存在就创建打开
    		$zip = new ZipArchive();
    		if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
    			return false;
    		}
    		//向zip文件夹中追加压缩文件
    		foreach($valid_files as $file) {
    			//addFile(文件绝对路径,新文件名)
    			$zip->addFile($file,$file);
    		}
    		
    		//关闭zip函数
    		$zip->close();
    		//下载前判断文件是否打包
            if(!file_exists($destination)){
                message('文件夹不存在', '', 'error');
            }
    
            //下载zip
            header("Cache-Control: public");
            header("Content-Description: File Transfer");
            header('Content-disposition: attachment; filename='.basename($destination)); //文件名
            header("Content-Type: application/zip"); //zip格式的
            header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
            header('Content-Length: '. filesize($destination)); //告诉浏览器,文件大小
            readfile($destination);
           	exit();
    	}else{
    		return false;
    	}
    }

     

    展开全文
  • 前端js 下载zip文件并解压

    千次阅读 2021-03-18 17:33:26
    昨天做项目有个需求,后端返回的数据有个字段是url,前端要通过这个url下载一个3D模型文件,这个模型文件是zip文件(里面有个json文件),拿到这个zip文件还需要解压那到json文件!看下面怎么实现的! 一. 后端返回...

    昨天做项目有个需求,后端返回的数据有个字段是url,前端要通过这个url下载一个3D模型文件,这个模型文件是zip文件(里面有个json文件),拿到这个zip文件还需要解压那到json文件!看下面怎么实现的!


    一. 后端返回文件流,前端必须进行转换下载,请求的方式很多,我下面随便写几种!


    1.原生js的

    function getBlob() {
         let file_url = "http://192.168.26.70/file/file/static/threeDModel/vacuumFlask/vacuumFlask.zip"
         let xhr = new XMLHttpRequest();
         xhr.open("get", file_url, true);
         xhr.responseType = "blob";
         xhr.onload = () => {
             if (this.readyState == 4 && this.status == 200) {
                 console.log(this.response)
             }
         };
         xhr.send();
     };
     getBlob();
    

    2.使用angularJS的$http

    let templatedownload = () => {
    var url = 'http://192.168.26.70/file/file/static/threeDModel/vacuumFlask/vacuumFlask.zip';
    return $http({
        method: "GET",
        url: url,
        responseType: "blob",
    })
    };
    templatedownload().then((response) => {
    console.log(response.data);
    });
    

    3.使用fetch

    fetch('http://192.168.26.70/file/static/threeDModel/vacuumFlask/vacuumFlask.zip').then((
        response) => {
        console.log(response);
        return response.blob();//解析成blob对象
    }).then((data) => {
        console.log(data);
    });
    

    二.利用jszip插件解压zip文件

    <script src="jszip.js"></script>
    <script src="jszip-utils.js"></script>
    
    <script>
    let templatedownload = () => {
        var url = 'http://localhost:8008/file/static/threeDModel/vacuumFlask/vacuumFlask.zip';
        return $http({
            method: "GET",
            url: url,
            responseType: "blob",
        })
    };
    templatedownload().then(function (response) {
        JSZip.loadAsync(response.data)//blob对象
            .then((zip) => {
                return zip.file("vacuumFlask.json").async("string");//找到需要解压的文件的名称
            })
            .then((response) => {
                console.log(response);//返回解压成功的json文件
            }, (error) => {
                console.log(error);
            });
    })
    </script>
    



    三.项目代码

    //3D模型下载接口处理
    class ThreeDPreviewBoardRestService {
        constructor(
            private restService: services.common.RestService,
            private $http: angular.IHttpService,
            private $cacheFactory: angular.ICacheFactoryService) {
        }
    
    
    threeDModelDownload(fileLocation: string): Promise<any> {
        let that = this;
        return new Promise(function (resolve, reject) {
            if (that.$cacheFactory.get('threeDModelObj')) {
                // 缓存不为空,则将缓存值返回
                resolve(that.$cacheFactory.get('threeDModelObj').get('threeDModel'));
            } else {
                that.$http({
                    method: "GET",
                    url: that.restService.getConfigUrl('FILE_SERVICE.FILE_STATIC', fileLocation),
                    responseType: "blob",
                }).then(function (response) {
                    let cache = that.$cacheFactory('threeDModelObj');
                    cache.put("threeDModel", response.data);
                    resolve(response.data);
                }, function (error) {
                    reject(error);
                })
            };
        })
     }
    }
    
    let injectors = ["restService", "$http", "$cacheFactory", ThreeDPreviewBoardRestService];
    
    export { ThreeDPreviewBoardRestService, injectors }
    

    这个文件请求blob数据并对此数据进行缓存

    private getZipThreeDModelObject(threeDModel, threeDModelName: string): angular.IPromise<any> {
        let deferred = this.$q.defer();
        try {
            JSZip.loadAsync(threeDModel)
                .then(function (zip) {
                    return zip.file(threeDModelName)?.async("string");
                })
                .then(function success(threeDModelObject) {
                    threeDModelObject && deferred.resolve(JSON.parse(threeDModelObject));
                }, function error(error) {
                    deferred.reject(error);
                });
        } catch (error) {
            deferred.reject(error);
        }
        return deferred.promise as angular.IPromise<any>;
    };
    

    这个文件对文件进行解压获取3d模型数据,这里只列出了核心代码!

    展开全文
  • 今天遇到一个问题,就是下载zip文件打不开,一直显示文件被损坏。 本来觉得是后端的问题,但是排除了好久,确实没有问题,postman也实验成功。 后来发现系统main.js中引入了mock数据,影响了axios请求,造成了...
  • 将文件服务器上的zip文件下载到运行服务器;  4.将下载的zip文件解压到本地(文件大小超过50KB时报文件被损坏);   分析:  既然报文件被损坏,肯定就是因为下载文件时文件没有读取完全。 程序肯定不会骗人,但是...
  • // vue 中的调用方法 ... alert('下载zip模板') axios({ method: 'GET', url: '/business/api/download', // params: { // // eslint-disable-next-line no-undef // reportRuleId: row.reportRuleId ..
  • vue blob流下载zip文件

    千次阅读 2019-11-19 13:57:54
    asset_zip(this.delarr).then((res) => { const content = res.data const blob = new Blob([content],{type:"application/zip"}) var timestamp = (new Date()).valueOf(); const fileName = t...
  • response下载zip文件

    千次阅读 2016-01-04 21:27:44
    文件下载,以流的方式
  • vue axios post形式下载zip文件

    千次阅读 2020-05-27 10:18:30
    axios以post形式发送请求, 获取zip文件下载到本地 downloadFile() { var reqData = qs.stringify({ // form-data格式的数据 fileIds: "98g8349g-2343jkng8s98fga-324rkjgq" }); axios .post("/api/download...
  • vue从后台下载.zip压缩包文件

    万次阅读 多人点赞 2019-10-31 17:43:54
    vue前后端分离,使用element的el-button组件从后台下载文件,并且解决乱码问题 1.添加下载按钮 2.(原始方法,会出现乱码)给按钮添加点击事件,添加接口代码 download: function() { const row = this....
  • 文件下载 //下载单个文件 public void downloadFile(HttpServletResponse response){ String path = "D:\test\ce\1.txt" File file = new File(path); if(file.exists()){ String fil...
  • 使用Java以zip形式批量下载文件、压缩文件

    万次阅读 多人点赞 2020-07-19 21:22:25
    这篇博客详细介绍了在Java中以zip形式批量下载文件,博客中有完整的代码实现。
  • springboot-单文件下载、多文件下载zip

    万次阅读 多人点赞 2018-11-05 09:58:33
    思路一:后台拿到图片信息再循环的方式,实践后发现行不通,只能下载第一个文件。 原因:当第一次输出流关闭后请求结束,链接关闭,后续的循环已无意义。 思路二:后台不行就在前台进行循环,多次请求。实践后发现...
  • Python压缩解压zip,Django下载zip文件

    千次阅读 2019-09-05 20:07:53
    python压缩文件 使用zipfile import zipfile def convert_zip(zip_path, save_... # zip_path 要压缩文件的路径 # save_path 文件压缩后保存的路径 ''' local_path = os.path.join(zip_path, "x.xls") zip ...
  • java 生成及下载zip文件

    万次阅读 2017-01-10 12:07:11
    1.生成zip文件 public boolean createCardImgZip(String sourcePath, String zipName) { // TODO Auto-generated method stub boolean result = false; String zipPath = "D:/test/"; File sourceFile = ...
  • SpringBoot文件批量zip打包下载

    千次阅读 2020-12-15 22:10:57
    平时开发中文件的上传下载经常会遇到,如...此处介绍文件的批量下载, 如果一次性下载多个文件的话, 建议生成文件后将文件打成ZIP包,再下载,Java代码如下: import org.slf4j.Logger; import org.slf4j.LoggerFact
  • Android 下载Zip文件,并解压到本地,进行本地调用

    千次阅读 热门讨论 2019-03-14 16:23:37
    如有不对的地方,望各路大神指点,小女子在此谢过O(∩_∩)O 点击此处下载demo,看完整代码,(*^__^*) 嘻嘻…… ... * 下载zip文件 * * @param url */ private void downloadFile(final String url) { OkHttpCli...
  • 看起来zip包自动解压功能倒是贴心,可是有时候zip包比较大,下载后不想立即解压。怎么关闭呢? Safari>偏好设置>通用>下载打开“安全的”文件(取消前面方框中的勾选)
  • 今天遇到了个需求,需要从后端拿值下载zip压缩包到本地,后端给的格式是二进制流的,面对百度开发了下,发现都不大行,自己琢磨了下,写了个post下载的方法 import axios from 'axios' export default (params, url, ...
  • zip4j_1.3.2 - Java操作zip压缩文件接口最新版本

    千次下载 热门讨论 2015-01-09 11:27:53
    这是最新版本的zip4j,版本号是1.3.2 官网上没有提供api文档,我生了一份,一并打在zip...(针对分块zip文件创建和抽出文件) Supports Unicode file names (支持Unicode编码文件名) Progress Monitor (进度监控)
  • springboot-单文件多文件下载Zip

    万次阅读 2019-12-09 13:17:52
    3.把压缩文件通过输出流传输给客户端(注意:必须在zipoutputstream流关闭后,否则下载下的文件会报不可预料的压缩文件末端) 4.删除服务器上的临时文件文件 public void downImg(HttpServletResponse response,...
  • python zip压缩文件下载及解压

    千次阅读 2019-09-19 10:23:43
    第一步 zip文件下载 这里是多个zip文件下载链接存在列表中,用requests请求链接,写入到本地文件夹,命名同下载链接中命名相同,通过设置参数stream=True,可使下载的文件分块持续写入磁盘文件中,否则会先下载到...
  • java下载压缩包文件zip

    千次阅读 2017-07-21 14:27:41
    该案例从数据库查询出来数据,然后打包下载 @RequestMapping("/download") public void download(UCFQRCodeRequestBO qrCodeRequestBO, HttpSession session, HttpServletResponse response) { ...
  • 压缩为zip文件 1. 通过java程序输出文件 /** * 功能:压缩多个文件成一个zip文件 * @param srcfile:源文件列表 * @param zipfile:压缩后的文件 */ public static void zipFiles(File[] srcfile, File zipfile) ...
  • 简介: 最近项目中需要做一个批量打包ZIP下载,以前做过,但是没有记录下来。于是又开始烧脑进行开发,本次也记录下来方便大家参考。直接上代码:第一步: 列表选择需要下载的图片,将ID发送至后台。 //下载 ...
  • xshell 上传下载zip文件

    千次阅读 2019-07-05 21:28:55
    图片少了个y 用这条命令安装 #yum install -y lrzsz rz #上传文件 sz #下载文件 centos解压zip文件 yum install -y unzip # unzip xxxx.zip #解压
  • 【Java】Java实现批量打包文件Zip下载

    千次阅读 2017-05-19 16:18:34
    有这样一个需求,需要将某个文件夹进行下载,而且该文件下包含多张图片,图片是存储于Linux服务器上的。故采用zip打包方式进行下载。在此并没有采用获取网络图片的方式进行下载,而是找到图片在服务器上存储路径进行...
  • Android--下载zip压缩文件并解压

    千次阅读 2016-12-21 17:05:14
    网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,在此记录一下下载zip文件并直接解压的方法,直接上代码。 源码下载:http://download.csdn.net/detail/chaoyu168/9717756 下载: import java.io...
  • js原生方式post请求下载zip文件

    千次阅读 2019-04-04 16:10:58
    做vue后台项目的时候需要post请求向后台提交多数据,方法如下 let url = window.g.ApiUrl + '/file/export/info'; var xhr = new XMLHttpRequest(); xhr.open('post', url, true); xhr.responseType = 'blob';...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 717,960
精华内容 287,184
关键字:

下载的zip文件怎么打开