附件打包zip下载需求

需求:前端发送一个表单 id,根据表单 id 查询出数据库中全部相关附件(数据库存储了附件url,格式为https://xxx),将附件打包为zip后返回前端浏览器下载
分析:

1、根据 id 获取到全部文件,使用 URL 类的 openStream() 方法,获取 url 路径中文件的输出流
2、创建一个 ByteArrayOutputStream 对象,作为参数传递到 ZipOutputStream 对象的构造器中,使用 ZipOutputStream 的 write() 方法,将url 路径中文件的输出流数据流写入到 ByteArrayOutputStream 流中
3、将 ByteArrayOutputStream 对象转化为字节数组,再将字节数组写入到 ServletOutputStream 中,之后再返回给前端

示例代码:

/**
 * 文件下载 Controller 层
 * @param id
 * @param response
 * @return
 */
@AutoLog(value = "下载文件")
@GetMapping(value = "/downFile")
public Wrapper<?> downFile(String id, HttpServletResponse response) {
    optimalFileService.download(id, response);
}
/**
 * 文件下载 Service 层
 * @param id
 * @param response
 */
public void download(String id, HttpServletResponse response) {
    if (StringUtils.isNotEmpty(id)) {
        List<OptimalFile> optimalFileList = this.list(new LambdaQueryWrapper<OptimalFile>().eq(OptimalFile::getRelevanceId, id));
        InputStream inputStream = null;
        // 创建一个ByteArrayOutputStream对象,用于接收文件流数据
        ByteArrayOutputStream baos = null;
        ZipOutputStream zipOut = null;
        ServletOutputStream outputStream = null;
        try {
            baos = new ByteArrayOutputStream();
            // ByteArrayOutputStream 对象作为 ZipOutputStream 构造器参数传入
            // ZipOutputStream 写入的数据会存储到 ByteArrayOutputStream 中
            zipOut = new ZipOutputStream(baos);
            for (int i = 0; i < optimalFileList.size(); i++) {
                // 将数据库文件的 url 字符串转化为 URL 对象之后,获取文件输入流
                inputStream = new URL(optimalFileList.get(i).getUrl()).openStream();
                // 往 ZipOutputStream 中添加文件
                zipOut.putNextEntry(new ZipEntry(i + 1 + "、" + optimalFileList.get(i).getFileName()));
                int len;
                byte[] buf = new byte[1024];
                // 将输入流的数据写入输出流中
                while ((len = inputStream.read(buf)) != -1) {
                    zipOut.write(buf, 0, len);
                }
                zipOut.closeEntry();
            }
            // 完成压缩
            zipOut.finish();
            // 将 ByteArrayOutputStream 转化为字节数组
            byte[] zipBytes = baos.toByteArray();

            // 设置 HttpServletResponse
            String fileName = URLEncoder.encode("附件下载.zip", "UTF-8");
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/zip");
            response.setHeader("Content-Disposition", "attachment;FileName=" + fileName);
            // 获取响应输出流
            outputStream = response.getOutputStream();
            // 写入内容
            outputStream.write(zipBytes);
            // 将响应缓冲区内容发送至客户端
            response.flushBuffer();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭流资源
            try {
                if (outputStream != null) {
                    outputStream.close();
                }
                if (baos != null) {
                    baos.close();
                }
                if (zipOut != null) {
                    zipOut.close();
                }
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
禅道开源项目管理软件4.3.beta版本于08月05日正式发布,该版本主要完善批量操作、api和扩展的例子。调整插件管理功能。完善测试管理功能。 注:该版本为BETA版本,不建议用于生产环境 一、修改记录 完成的需求: 1156 在确认bug的时候可以设置bug的优先级 1155 处理发信逻辑,已经删除的用户不要再发送邮件 1154 参考论坛用户的建议,考虑实现浏览器贴图上传功能 1152 备注中添加的超链接在显示的时候被过滤掉了 1151 在禅道中增加对浏览器支持的说明 1150 用例导入模板页面,显示模板编号用于比对。 1127 打包的时候把扩展目录下面的css,js也都生成 1116 显示燃尽图的时候默认将周末去掉。 1111 web应用安装之后,页面不用刷新。改用ajax修改安装按钮的状态。 1108 从计划中移除需求的时候,正确处理其所处的阶段 1105 zentaotest, zentaotask,zentaostory单独设置flow。 1103 发信应该可以重新设置。 1102 调整组织视图用户界面各个功能页面的样式,保持统一 1101 完善升级逻辑,增加插件的兼容性处理。 1100 增加不兼容插件功能 1099 安装插件的时候,将确认按钮放在上面 1096 桌面提醒增加繁体版本 1088 在创建附件目录的时候,自动创建一个空白的index.html 1080 整理使用到的session列表 1078 禅道中有开始和结束日期的地方增加结束日期不能小于开始日期的检查 1074 作为测试人员,我需要在测试任务的详情里方便的查看测试版本需求 1072 用例的批量添加页面需要处理。 1070 项目视图的需求列表页面增加创建用例的链接 1069 添加完项目之后的弹出页面停留。 1068 在添加对象的时候,如果某个字段没有取值列表,给出相应的链接,并可局部刷新 1067 创建新的计划的时候选择最新的一个计划结束日期开始。 1066 创建应用的时候,判断是否有http:// 1065 批量添加用户的时候,第一个密码的同上按钮去掉。 1064 用户列表里面的最后登录时间去掉1970。 1063 添加用户的时候,没有带部门条件。(包括批量添加) 1062 部门的排序给默认数字。 1061 安装成功之后的首页,将项目和产品区块的背景色去掉。 1060 init.bat生成的ztcli.bat错误 1059 调整和修复任务、测试和需求扩展模块的代码 1057 重新梳理默认的权限列表 1056 没有批量编辑权限的情况下,把多选框去掉 1055 查看组织日志/TODO时,横向滚动时,锁定前两列的部门及员工姓名。 1053 启动任务的时候自动修改指派者 1052 测试任务的用例列表增加搜索功能 1049 备注编辑功能,只有最后一个备注才可以修改或者删除。 1045 详情页面的操作图标都加上提示。 1043 dao.class.php查询sql的时候自动增加deleted=0的条件 1042 增加bug的批量添加功能 1039 我的地盘里面的我的任务,bug,需求等增加批量操作。 1037 返回的按钮改为<<这种形式的? 1030 插件增加是否是官方出品字段 1029 创建项目的时候,关联产品使用chosen实现 1026 测试任务关联的用例版本发生变化之后,应当给予提示和确认。 1025 我的地盘中的用例增加执行功能,要判断是否是在测试任务中。 1022 添加需求,任务,bug,文档的时候判断是否重复。 1017 修复文档库当内容比较多的时候的页面框架变形的问题。 1010 我的地盘中的待办列表页面可以选择日期导入 1006 整理每个页面的标题和position 1005 各个列表页面的模块都可以折叠隐藏 1003 和禅道服务器进行交互的api都改为二级域名。 1002 和禅道服务器进行交互的api都加上语言选项 1000 从项目提交测试的bug自动修改其解决方案 994 重新设计项目列表的折叠和隐藏功能 986 批量添加的时候,将input改为textarea 981 调整各个对象编辑页面的标题文本框的排版 979 调整测试任务的详情页面,和其他的详情页面保持一致 971 将扩展编辑器放在插件菜单下面。 967 任务列表增加导入按钮 925 创建产品、需求的时候 复责人、评审人建议过滤closed 918 草稿需求阶段在取消计划和取消项目关联的时候没有处理 872 测试用例导出的数据 没有用例的执行结果 871 测试人员创建bug的时候可以选择没有权限的项目,但是创建bug之后却看不到,导致重复提交 853 实现需求测试用例覆盖率功能 826 在禅道中提供api方面的实际例子 746 使用ajax实现列表页面的删除或者移除功能 680 增加依赖插件的功能 586 优化批量添加用例时的需求列表 562 测试用例增加csv格式的导入功能 404 调整统计报表的展示形式 379 完善部门删除的逻辑 130 完善需求列表页面增加批量操作 122 计划中关联bug 修复的BUG: 451 【查询用例】执行用例的时候,不方便查看上一次的用例执行结果,建议将用例执行结果表单链接在用例的下方 453 激活bug时备注内容没有处理html代码,导致保存后页面布局严重混乱。   功能截图 1、Windows一键安装包的新的控制面板 到xampp目录中,点击start.bat,运行。 2、桌面提醒工具 禅道软件的下方有“下载桌面提醒工具”的链接,点击可以下载。 解压后,点击notify.bat,运行。 3、导出是增加导出选中。 选中想要导出的条目,点击导出。 可以只导出选中的条目。 4、精简顶部菜单。 5、为了方便人们选择,增加成员维护列表。 可以维护成员列表,以便使用。
Lerx 网站内容管理系统 v5.5 更新日志 1.修复了短信验证码发送时间间隔无效,可能引起连续恶意验证的问题。 2.来访IP记录,如果来源Reffer和当前地址相同,则不记录Reffer。 3.记录来访IP记录的总访问数。(注:若间隔6小时以上,则重新记录) 4.解决站点手机监控平台中url地址不自动断行引起的美观和左右滑摆问题。 5.增加QQ帐号互联登录方式 6.增加微博帐号互联登录方式 7.增加微信帐号互联登录方式 8.网站的手机监控端增加最新评论列表 9.修复评论不记录客户端IP的问题 10.完全启动后5秒执行首页及栏目的静态文件生成、更新。 11.更换富文本编辑器。 12.发布文章的同时可以上传附件。 13.美化网站自动地图(导航)页。 14.更新了IP地址库(纯真)。 Lerx 网站内容管理系统软件简介 Lerx 网站内容管理系统是一套开源免费的基于Java环境的,采用Spring 4和Hibernate 5 开发的各类门户网站内容管理。采用了低耦合式模块化设计。拥有版本更新自动提醒、智能网站模板市场、文件上传防重、智能裁剪等等独特优势功能。 Lerx CMS V5版(以下简称V5版)采用了基于JavaSpringMVC框架,抛弃了V2-V3版本使用的Struts 2。SpringMVC框架更加安全、稳定。ORM持久化框架依旧使用Hibernate,版本为5.4。开发时采用的数据库为MySQL。是一个能快速上手的开源的网站建设CMS。 SpringMVC Hibernate ORM MySQL Hibernate Search(Apache Lucence) IK中文分词 Log4J ... 主要采用Jquery 1.9.1,使用Layui 2模块化前端框架。 Jquery Layui JSON Ajax Lerx 网站内容管理系统主要功能 前后台用户及角色管理、站点管理、栏目、文章管理、模板管理、自由开放的模板市场、系统监测、调查(投票及点赞)、评论、全面的日志系统、来访登记统计系统。 实现功能(标记★的为关键的或独特的内容) 1.跨平台系统,能无差别的运行于Windows、Linux、Mac OS等操作系统。 2.★拥有云端版本更新通知服务器,可在后台获取官方的最新版本及每次更新的版本更新信息,及时通知用户进行升级。 3.★验证码支持短信、邮箱发送。短信模板已支持国内常用短信平台的接口,支持腾讯云短信接口。配置简单。 4.支持最高权限后台登录的限制登录IP功能。IP或IP范围设置灵活,可以同时设多个IP及IP范围的任间组合。 5.在忘记后台登录密码时,支持临时配置文件获取用户名和密码登录模式。 6.用户组(角色)权限利用鼠标点击在权限细节上打勾即可完成。能对用户组(角色)整体禁用,能查看各用户组的会员人数。 7.★前后台用户登录均支持首次不显示验证码模式。拥有多次失败登录后限时锁定及解锁机制。 8.用户模块记录用户的注册时间IP,每次登录的IP、手机、邮箱等细节,能通过简单的标记查看用户的密码修改情况。。每次登录均记录在日志文件中。 9.★可以使用用户名、邮箱、手机号码任一方式进行登录。具有忘记密码功能,可以通过短信、邮箱发送验证码给用户,验证后修改登录密码。 10.★具有深度的来访记录及统计功能。站点、每个栏目、每篇文章均拥有独立的来访IP记录节点模块,可完成从站点开放以来各个节点的年度、季度、月度、星期、天、小时的统计和报表功能。能获得站点、每个栏目、每篇文章的来访IP量及阅读量,能生成独立的报表。 11.每篇文章都各自拥有独立的调查模块,可以完成点赞功能或赞成、反对和中立的页面操作。★能获得每篇文章的调查统计数据及详细报表。 12.每篇文章均拥有独立的评论模块。支持匿名评论,支持评论后审核通过模式,支持文章发布者管理评论,支持前台管理员评论管理。 13.拥有强壮的栏目树功能,移动、排序栏目非常方便。 14.可以设定各个栏目是否对外面,及限制访问IP。可以一键关闭栏目下的所有文章的调查、评论。可以采用聚集功能配合模块调整栏目在前台页面上的栏目及栏目下文章显示。 15.★具有智能裁剪功能。能获知图片的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。 16.★每个栏目可拥有独立的私有特定的HTML,可以无损后显示在栏目的显示页中。 17.可以设定栏目的静态化文件夹名。 18.首页、栏目页、文章页均采用HTML静态化措施。静态化文件为真实静态方式。文章在审核通过时会自动生成HTML文件,在取消审核状态后会自动删除HTML文件。能
FileMenu Tools 中文版支持编辑常见的几个窗口的右键菜单,以及添加多种实用的菜单选项操作。能自定义 Windows 资源管理器右键菜单的功能,而并非仅限于增加和删除。自由为右键菜单添加一些如“打包到目录、在此处打开命令行工具、复制到、移动到、注册与反注册DLL”等实用性的增加菜单。涉及到文件、文件夹、系统常用命令等各个方面。 FileMenu Tools 简体中文版是一免费的Windows右键菜单增强软件。它可以自定义Windows资源管理器右键菜单的功能,而并非仅限于增加和删除。FileMenu Tools可以为右键菜单添加一些如“打包到目录、在此处打开命令行工具、复制到、移动到、注册与反注册DLL”等实用性的增加菜单。涉及到文件、文件夹、系统常用命令等各个方面。如果你认为FileMenu Tools自带的这些增强命令不能满足你的需求,你还可以添加自定义运行外部应用程序的命令。相信在你使用FileMenu Tools后会大大提高你的工作效率,减少一些不必要的步骤! 内置的实用工具: 同步文件夹: 可指定同步类型(单向,双向等)和要同步的文件类型。 元素类型:文件夹 扩展删除: 从文件夹中递归删除特定的文件类型。可以使用通配符指定文件类型,例如:*.txt, *.t?? 等。 元素类型:文件夹 查找和替换: 在所有选择的文件中查找并替换文本字符串。支持正则表达式。 元素类型:文件和文件夹 高级重命名: 根据指定的规则重命名所有选择的元素。 元素类型:文件和文件夹 删除锁定文件: 删除由任何应用程序锁定的且无法正常删除的文件。 元素类型:锁定文件 永久删除: 删除选择的元素,而不将它们移动到回收站。 元素类型:文件和文件夹 更改图标: 更改分配给已选择文件夹的图标。 元素类型:文件夹 使用参数运行: 在对话框中运行带有参数类型的程序。 元素类型:文件(.exe、.com、.bat) 命令行窗口: 在选择的文件夹中打开一个命令行窗口。 元素类型:文件夹 属性: 显示一个子菜单,允许您更改选择元素的属性。如果选择了一个文件夹,则可以递归更改属性。 元素类型:文件和文件夹 拆分文件: 将选择的文件拆分成多个部分。 元素类型:carpetas 合并文件: 合并以前被拆分的文件部分。 元素类型:文件(.prt) 复制到: 将选择的元素复制到另一个文件夹。可指定过滤器,以便复制特定的文件类型。 元素类型:文件和文件夹 移动到: 将选择的元素移动到另一个文件夹。可指定过滤器,以便移动特定的文件类型。 元素类型:文件和文件夹 复制名称: 将所有选择元素的名称复制到剪贴板。 元素类型:文件和文件夹 复制路径: 将所有选择元素的路径复制到剪贴板。 元素类型:文件和文件夹 复制 UNC 路径: 将 UNC 格式(\\machine\SharedResource\Path)中所有选择的元素路径复制到剪贴板。 元素类型:文件和文件夹 复制网络路径: 将网络格式(file:///Path)中所有选择的元素路径复制到剪贴板。 元素类型:文件和文件夹 复制内容: 将选择元素的内容复制到剪贴板。如果选择了文件夹,则复制该文件夹中的所有元素名称。 元素类型:文件和文件夹 粘贴剪贴板: 将剪贴板中的内容追加到选择的元素。如果选择了文件夹,则在该文件夹中创建具有剪贴板内容的文件。 元素类型:文件和文件夹 更改时间: 更改选择元素的创建时间、最后访问时间或最后修改时间。如果选择了文件夹,则可以递归更改子文件夹的时间。 元素类型:文件和文件夹 文件夹大小: 显示文件夹的大小。 元素类型:文件夹 注册 DLL: 在 Windows 中注册 DLL。 元素类型:文件(.dll、.ocx) 注销 DLL: 注销一个 DLL。 元素类型:文件(.dll、.ocx) 创建新文件夹: 在选择的文件夹中创建一个新文件夹。 元素类型:文件夹 发送到邮件收件人: 将选择的元素作为附件发送电子邮件。 元素类型:文件和文件夹 粉碎文件: 粉碎选择的文件,使它无法用恢复工具恢复文件。 元素类型:文件和文件夹 重复文件: 在当前文件夹中创建已选择元素的新副本。 元素类型:文件和文件夹 打包到文件夹: 在当前文件夹中创建一个新的子文件夹,并将所有选择的元素移动到此子文件夹。 元素类型:文件和文件夹 解包文件夹: 将已选择文件夹中的所有元素移动到父文件夹,然后删除这些空文件夹。 元素类型:文件夹 选择: 在 Windows 文件资源管理器中按类型选择元素。此工具在 Windows 7 或更高版本中无效。 元素类型:文件夹 创建符号链接: 创建一个引用到选择元素的符号链接。它只适用于 Windows Vista 或更高版本。 元素类型:文件和文件夹 计算和验证校验和: 计算并验证选择
Xiuno BBS 是国产的一套面向千万级数据量设计的开源论坛软件,基于 PHP/MySQL/MongoDB/Memcached/Linux C/JQuery/ 等技术,采用 MVC AOP 模式组织代码,旨在解决BBS站点负载过高的问题,是大中型站点比较理想的选择对象。 Xiuno 这个名字来源于圣斗士星矢白羊座的黄金圣斗士修罗,他的攻击速度和战斗力是十二宫最强的,他是速度和力量的化身; 在佛教里面,修罗为六道之一,英文:Shura,处于人道和天道之间的一道,半人半神,性情刚烈,好战斗,梵语中,修罗意味端庄,气宇轩昂(阿为否定,阿修罗意思为丑陋好斗)。我们取其寓意,希望 Xiuno 变得越来越强,越来越快。   Xiuno BBS 2.0.0 正式版不同于发布的三个预览 RC1,RC2,RC3,之前我们只是在负载上优化,在布局和概念上还是基本走传统路线的概念,但是在后来发现,传统论坛在信息量增大的时候,板块数会随着增多(因为需要分类),而板块多,又会导致人气分散,这个矛盾会越来越明显。所以我们借鉴了“单板论坛”的概念,采用尽可能少的版块(比较极限的就是采用一个版块),但是实际上单板是远远不能满足信息分类的需求的,所以我们借鉴单板论坛布局的优点,加入了增强的多维主题分类(最多四维)概念,用来加强信息的整理归类。   负载方面:这是 Xiuno BBS 最为重视的部分,从设计到编码对性能的追求都到了极致。通过测试站点测试,加了APC的环境,跑千万帖子依然是在 0.00x秒,官方服务器没有开APC,在 0.01秒左右。   功能方面:砍掉了很多无关紧要的功能,比如贴内回复,友情链接(可以作为插件存在),让代码变得更加精炼,目前打包后只有600k 。   正式版在以下几个方面做了改进: 一级版块分类 多维主题分类 随着帖子的增多,需要归类,现有的多级版块系统存在的弊端: 1. 入口多让用户不知如何选择。 2. 人气的分散,各个板块间的用户很难互动。 3. 斑竹的管理成本增加,设置多个斑竹。 我们给出的方案:一级版块 四维主题分类,良好的解决了这个问题!   补丁更新记录   修复附件删除后再增加计数不准确导致的附件不显示 2013/8/28 增加清空对话记录功能(感谢老汉孜孜不倦的督促) 2013/8/28 修正开启CDN后注册IP获取非正式IP(感谢ololio百折不饶的提醒)2013/8/29 conf/conf.php 增加 logo_url 配置项,默认为 app_url 2013/8/30 修正新上传附件删除不了的BUG 2013/8/30 Xiuno Editor 插件上线 2013/8/30 修复 Xiuno Editor 编辑器自动清空内容失败的问题 2013/9/1 修复百度编辑器上传图片无登录判断(感谢ololio 提醒) 2013/9/5 XiunoPHP 接口增加 table_column_add(), table_column_drop() 2013/9/5 修正 xn_editor 插件里的附件金币更新失败 2013/9/9 增加主题分类版主权限 2013/9/12 在线人数列表查看 2013/9/16 特殊用户组调整为 >1000 (不再受限于7,8,9) 2013/9/18       安装后,进入后台安装,挑选一款自己喜欢的编辑器安装! 目前支持:百度编辑器 Uediotr  、MarkDown 编辑器 、Xiuno Editor 整合了百度编辑的“截屏”、“图片本地化”、“插入表格”、“插入地图”等功能。 另外插件中心上线了:Xiuno CMS、Xiuno Shop、Shop Blog 等大型插件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值