精华内容
下载资源
问答
  • 下载一个压缩包
    千次阅读
    2022-01-04 13:34:23

    最近项目有需求,需要把管理中的数据,按照ID下载其附件,但由于附件较多,因此需要用压缩包的形式下载。

    我们的文件都采用相对路径存储在远程FTP服务器。因此需要连接远程FTP服务器(正式环境存储在OSS服务器)

    需要用到的对象如下:ZipOutputStream ZipEntry

    ZipOutputStream下有多个ZipEntry。就像一个纸盒子里面有很多饼干,糖果等等。纸盒子就是输出流ZipOutputStream,饼干和糖果就是ZipEntry。商店把饼干和糖果装进(putNextEntry)纸盒子里系好然后卖给你

    理解了概念,代码直接贴出来了。

    代码如下:

    步骤一:取数,得到文件名

        /**
         * 【下载附件】报价记录/报名记录
         * @param id
         */
        @GetMapping("/download/{id}")
        public void downloadAnnex(@PathVariable("id") Long id) {
            BiddingRecordDto brDto = biddingRecordFacede.getById(id);
            if(null == brDto){
                log.error("{}",brDto.toString());
                throw new CustomTipException("未查询到报价信息!");
            }
            List<String> imageAnnexs = new ArrayList<>();
            List<String> fileAnnexs = new ArrayList<>();
            if(!StringUtils.isEmpty(brDto.getImageAnnex())){
                imageAnnexs = JSONArray.parseArray(brDto.getImageAnnex()).toJavaList(String.class);
            }
            if(!StringUtils.isEmpty(brDto.getFileAnnex())){
                fileAnnexs = JSONArray.parseArray(brDto.getFileAnnex()).toJavaList(String.class);    
            }
            List<String> unionList = new ArrayList<>();
            if(!CollectionUtils.isEmpty(imageAnnexs)){
                unionList.addAll(imageAnnexs);
            }
            if(!CollectionUtils.isEmpty(fileAnnexs)){
                unionList.addAll(fileAnnexs);
            }
            log.info(imageAnnexs.toString()+"\n"+fileAnnexs.toString());
            String fileName = UUID.randomUUID().toString();
            exportToBrowser(browsePath,fileName+".zip",unionList,response,request);
    
        }

    步骤二:导出ZIP,输出到浏览器

        /**
         * 导出zip文件,输出到浏览器
         */
        public static void exportToBrowser(String browsePath,String fileName, List<String> annexPaths, HttpServletResponse response, HttpServletRequest request) {
            try {
                // 浏览器处理乱码问题
                String userAgent = request.getHeader("User-Agent");
                // filename.getBytes("UTF-8")处理safari的乱码问题
                byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8");
                // 各浏览器基本都支持ISO编码
                fileName = new String(bytes, "ISO-8859-1");
                // 文件名外的双引号处理firefox的空格截断问题
                response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
                response.setContentType("application/x-msdownload");
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
                doZIP(browsePath,annexPaths, response);
            } catch (Exception e) {
                log.info("下载失败!" + e);
            }
        }

    步骤三:打包成压缩包

        /**
         * 压缩文件
         * @param browsePath 文件存储服务器路径
         * @param annexPaths 文件名称
         * @param response
         * @throws IOException
         */
        public static void doZIP(String browsePath,List<String> annexPaths,HttpServletResponse response) throws IOException{
            InputStream input = null;
            //定义压缩输出流
            ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
            for (String fileName : annexPaths) {
                //拼接相对路径成绝对路径
                String AnnexPath = browsePath+fileName;
                URL url = new URL(AnnexPath);
                HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                input = connection.getInputStream();
                //压缩包中的子条目
                int i = fileName.lastIndexOf("/")+1;
                String name = fileName.substring(i);
                ZipEntry zipEntry = new ZipEntry(name);
                zipOut.putNextEntry(zipEntry);
                int len = 0;
                byte[] buffer = new byte[1024];
                while ((len = input.read(buffer)) != -1) {
                    zipOut.write(buffer, 0, len);
                }
                input.close();
            }
            zipOut.closeEntry();
            zipOut.close();
        }
    
    更多相关内容
  • git压缩包下载git下载

    2020-07-21 10:02:06
    git压缩包下载git下载
  • DW下载压缩包

    2018-11-16 09:23:55
    压缩包资源,可用于下载DW,还可利用DW里面的模板制作网页,非常好用
  • 名称:JDK8/jdk1.8压缩版 版本:jdk1.8.0_111
  • jdk1.6压缩包,下载即用

    2020-11-25 17:05:05
    jdk1.6压缩包,下载即用
  • Vscode压缩包下载

    2022-04-22 15:56:26
    Vscode压缩包下载
  • 一个压缩包文件

    2015-11-16 22:26:07
    msvcp100d,当电脑缺少此dll,可以下载压缩包
  • xshell压缩包下载

    2020-12-08 10:51:01
    Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
  • .zip上位机开发VC串口学习资料源码下载[187]本压缩包里 有两个程序一个是vc++和arm的c语言在ads中开发。.zip上位机开发VC串口学习资料源码下载[187]本压缩包里 有两个程序一个是vc++和arm的c语言在ads中开发。.zip...
  • Redis压缩包

    2018-04-05 21:47:20
    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
  • jsZip将多个文件压缩成一个压缩包

    千次阅读 2022-01-29 10:10:43
    在项目开发中,搭档大佬要做一个断点续传的功能,让我帮忙研究一下前端将多个文件压缩成一个压缩包的方法,所以就有了这篇文章。 我的demo是写在vue中的,所以首先要有一个vue环境,才能进行接下来的步骤。那么下面...

    在项目开发中,搭档大佬要做一个断点续传的功能,让我帮忙研究一下前端将多个文件压缩成一个压缩包的方法,所以就有了这篇文章。

    我的demo是写在vue中的,所以首先要有一个vue环境,才能进行接下来的步骤。那么下面我们就开始吧。

    1.cmd搭建一个vuex项目,简单分为以下两个步骤,具体可参考:参考地址

            (1)npm install --global vue-cli

            (2)vue init webpack demo

    2.在vue项目中安装jszip需要用到的相关插件

            (1)npm install jszip

             (2)npm install file-saver

            (3)npm install axios   

    3.在代码中引入组件 

    import axios from 'axios'
    import JSZip from 'jszip'
    // eslint-disable-next-line no-unused-vars
    import FileSaver from 'file-saver'

     4.download.vue组件完整代码:

    <template>
      <button @click="handleDownload">JSZip下载</button>
    </template>
    <script>
    import axios from 'axios'
    import JSZip from 'jszip'
    // eslint-disable-next-line no-unused-vars
    import FileSaver from 'file-saver'
    export default {
      name: 'Download',
      data () {
        return {
          // 需要下载的文件,必须要有文件路径和文件名称
          fileList: [
            {path: 'https://img2.baidu.com/it/u=1384527102,933211906&fm=26&fmt=auto', fileName: 'img1.jpeg'},
            {path: 'https://img1.baidu.com/it/u=4156422628,3560808221&fm=26&fmt=auto', fileName: 'img2.jpeg'},
            {path: 'https://img2.baidu.com/it/u=3005034651,882371095&fm=26&fmt=auto', fileName: 'img3.jpeg'},
            {path: 'https://img2.baidu.com/it/u=3005034651,882371095&fm=26&fmt=auto', fileName: '11.pdf'}
          ]
        }
      },
      methods: {
        /**
         * 下载按钮点击事件
         */
        handleDownload () {
          const zip = new JSZip()
          const cache = {}
          const promises = []
          this.fileList.forEach(item => {
            console.log('item', item)
            const promise = this.getFile(item.path).then(data => {
              // eslint-disable-next-line camelcase
              const file_name = item.fileName
              zip.file(file_name, item.path, { binary: true })
              cache[file_name] = data
            })
            promises.push(promise)
          })
          Promise.all(promises).then(() => {
            zip.generateAsync({ type: 'blob' }).then(content => {
              // 生成二进制流
              // FileSaver.saveAs(content, '文件下载.zip') // 利用file-saver保存文件  自定义文件名
              // eslint-disable-next-line no-undef
              saveAs(content, '文件下载.zip') // 利用file-saver保存文件  自定义文件名
            })
          })
        },
        /**
         * 获取文件
         * @param url 文件路径
         * @returns {Promise<unknown>}
         */
        getFile (url) {
          return new Promise((resolve, reject) => {
            axios({
              method: 'get',
              url,
              responseType: 'blob'
              // responseType: 'arraybuffer'
            })
              .then(data => {
                console.log('data', data)
                resolve(data.data)
              })
              .catch(error => {
                reject(error.toString())
              })
          })
        }
      }
    }
    </script>
    

     5.代码结构如下:

    6.实现结构如下:

     7.参考地址:

    参考1

    参考2

    展开全文
  • xshell6.0下载压缩包

    2019-04-08 09:26:40
    xshell6.0下载压缩包,上传主要是为了给自己保存资源,我来数数,看有没有50
  • 需要下载个压缩包,此是C++ Primer中文版(第五版).part1.rar
  • 开发工具--Git下载压缩包
  • nginx压缩包和依赖包
  • 压缩包字典.txt

    2019-06-19 15:38:09
    网站压缩包字典,用于扫描网站的备份,数据量大,准确率高
  • kraken压缩包密码恢复软件
  • 经典的c#源代码压缩包文件 ,供大家参考!里面包含198不同的例子,对于初学者有很大的帮助,希望多交流,分享更多的源代码内容!
  • 串口调试助手压缩包下载.zip
  • MinGW编译器压缩包

    2022-03-21 11:03:07
    VSCode编译C/C++编译器
  • JDK8压缩包

    2018-06-06 16:49:24
    apache官网JDK8,win版。有需要的朋友可以下载,只需1积分
  • JDK 1.7压缩包.zip

    2020-05-28 17:18:51
    这是Jdk1.7的压缩包,解压完成后在环境变量中配置JAVA_HOME以及path以后就可以用啦。检查是否配置好:win+r进入cmd,输入java -version,如出现版本号即为配置成功。
  • erlang压缩包.rar

    2021-08-30 15:45:19
    centos7-64位erlang环境
  • MySQL下载压缩包安装详细过程

    千次阅读 2021-01-18 19:05:47
    MySQL下载压缩包安装详细过程、下载打开官方网站:二、安装:1、MySQL安装文件.zip 压缩包安装2、zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行环境变量配置zip格式是自己解压3、我的电脑->...

    MySQL下载压缩包安装详细过程

    一、下载

    打开官方网站:

    0517259bbddbc6bd570f98fc3196a3de.png

    c01622d040570f4efa5c08eb59361802.png

    二、安装:

    1、MySQL安装文件.zip 压缩包安装

    2、zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行环境变量配置zip格式是自己解压

    3、我的电脑->属性->高级->环境变量

    选择Path,在其后面添加: 你的mysql bin文件夹的路径 :

    E:\mysql\mysql-8.0.22-winx64\bin;

    088aa819bd913489dcfe38ba2460241f.png

    4、配置完环境变量之后,在E:\mysql\mysql-8.0.22-winx64\bin目录下新增加一个配置文件mysql.ini ,同时在bin的同级目录下创建一个data文件夹(用于存放数据库数据)

    30a649ba29961988a55ff29290d3bbf1.png

    5、mysql.ini文件的内容如下

    9557c341b999a38f62481f2d36d2e71c.png

    mysql.ini配置如下:

    [mysql]

    # 设置mysql客户端默认字符集

    default-character-set=utf8

    [mysqld]

    #设置3306端口

    port = 3306

    # 设置mysql的安装目录

    basedir=E:\mysql\mysql-8.0.22-winx64

    # 设置mysql数据库的数据的存放目录

    datadir=E:\mysql\mysql-8.0.22-winx64\data

    # 允许最大连接数

    max_connections=200

    # 服务端使用的字符集默认为8比特编码的latin1字符集

    character-set-server=utf8

    6、# 创建新表时将使用的默认存储引擎

    default-storage-engine=INNODB

    打开cmd,不需要进入安装目录(∵之前配置过环境变量),输入下面命令,mysqld --initialize-insecure --user=mysql

    安装 mysql

    mysqld install

    6c57797225acf9bf4f3d55e30b621cc5.png

    启动服务启动服务,输入如下命令,回车,启动成功后如下图

    net start mysql

    7、服务启动成功之后,需要登录的时候输入命令(第一次登录没有密码,直接按回车过)

    9dbd0de6b7349fab4a6a6033f919364c.png

    8、修改密码(必须先启动mysql),执行如下命令回车,enter password也回车,密码一般设置为root,方便记忆

    2252eb12da4dd96c4850d9a3a49c5e5e.png

    三、运行服务

    1、在运行中输入Services.msc

    552d8247e728b19f3e18f68afd71732a.png

    2、启动服务:

    5c1fe4f64b241567caa17544f180ab01.png

    3、报错说明权限

    f2a5dc33a15653527734112ae3f62856.png

    4、主要是改变连接 MySQL 帐户的加密方式,MySQL 4.1/5.0 是通过 PASSWORD 这种方式加密的。可以通过以下两种方法得到解决:

    1) MySQL->SET PASSWORD FOR 'root'@'localhost'=OLD_PASSWORD('new_password');

    MySQL->FLUSH PRIVILEGES;

    2)MySQL->UPDATE MySQL.user SET Password=OLD_PASSWORD('new_password') WHERE Host='localhost' AND User='root';

    MySQL->FLUSH PRIVILEGES;

    99807795ce2c6e5eaec5436f0bddda1e.png

    5、use mysql

    alter user root@localhost identified with mysql_native_password by 'admin123';    // (admin123 为新密码,不要忘记后面的分号)

    flush privileges;

    6、安装反问成功

    768ef4c14714adebaa6ffe5ffd2425a6.png

    32bfe21863f3fc08e5992da14debc450.png

    展开全文
  • 压缩包中的工具类主要提供Java中下载文件的工具类,设置到以压缩文件的方式下 单个文件下载,批量文件下载
  • atom编程软件下载压缩包
  • 如何下载安装压缩包

    千次阅读 2020-12-30 00:37:29
    下载某文件为例: 下载文件; 打开计算机; 选择任意盘,比如D盘; 在空白处右键,选择新建文件夹,命名为HBuilder;重命名时,可选中该文件,快捷键f2,; 打开everything,搜索需要的文件关键名; 选中后...

    以下载某文件为例:
    在这里插入图片描述
    下载文件;
    在这里插入图片描述
    打开计算机;

    在这里插入图片描述
    选择任意盘,比如D盘;
    在这里插入图片描述
    在空白处右键,选择新建文件夹,命名为HBuilder;重命名时,可选中该文件,快捷键f2,;
    在这里插入图片描述
    打开everything,搜索需要的文件关键名;
    在这里插入图片描述
    选中后右击,选择打开路径;
    在这里插入图片描述
    将其拷贝下来;
    在这里插入图片描述
    粘贴到D盘的文件夹中;
    在这里插入图片描述
    右键,选择解压到当前目录;
    在这里插入图片描述
    这样就可以将它保存在想让它存在的文件夹中;
    在这里插入图片描述
    在这里插入图片描述
    双击打开该文件,找到同名的并且后缀为.exe的程序,就是我们需要运行的应用程序;
    在这里插入图片描述
    并且可以通过右键,发送到——>桌面快捷方式;
    在这里插入图片描述
    此时就可以在桌面上的找到该应用。

    展开全文
  • 打包下载压缩包.txt

    2019-07-31 14:58:01
    java代码,查询数据库,将数据库中的数据打包下载压缩包
  • 1.工具类 import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream;...import java.io.InputStream;...import java.net.HttpURLConnection;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 283,844
精华内容 113,537
关键字:

下载一个压缩包

友情链接: colock.rar