栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在WebApp中创建和下载巨大的ZIP(从多个BLOB)的最佳实践

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在WebApp中创建和下载巨大的ZIP(从多个BLOB)的最佳实践

对于无法立即放入内存的大型内容,请将内容从数据库 流式传输 到响应。

这种事情实际上很简单。您不需要AJAX或websocket,可以通过用户单击的简单链接来流式传输大文件下载。而且现代的浏览器都有不错的下载管理器,它们都有自己的进度条-
为什么要重新发明轮子?

如果为此从头开始编写servlet,请访问数据库BLOB,获取其输入流,然后将内容复制到HTTP响应输出流。如果您具有Apache Commons
IO库,则可以使用IOUtils.copy(),否则您可以自己执行此操作。

可以使用ZipOutputStream快速创建ZIP文件。在响应输出流上(从servlet或框架提供的任何内容)创建一个,然后从数据库中获取每个BLOB,

putNextEntry()
首先使用,然后如前所述对每个BLOB进行流式处理。

潜在的陷阱/问题:

  • 根据下载大小和网络速度,请求可能需要很多时间才能完成。防火墙等可以阻止这种情况并尽早终止请求。
  • 希望您的用户在请求这些文件时处于良好的公司网络中。如果是远程/躲闪/移动连接,情况会更糟(如果下载了2.0G的1.9G后掉线了,用户必须重新启动)。
  • 它可能会给您的服务器带来一些负担,尤其是压缩巨大的ZIP文件时。
    ZipOutputStream
    如果这是一个问题,则可能值得在创建时关闭/关闭压缩功能。
  • 2GB以上(或4 GB)的ZIP文件可能与某些ZIP程序有关。我认为最新的Java 7使用ZIP64扩展,因此此版本的Java将正确编写巨大的ZIP,但是客户端是否将具有支持大zip文件的程序?我以前肯定遇到过这些问题,尤其是在旧的Solaris服务器上


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469355.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号