在服务器上创建 Zip 文件并使用 java 下载该 zip

2024-06-05

我从 mkyong 获得了以下代码,用于在本地压缩文件。但是,我的要求是在服务器上压缩文件并需要下载它。任何人都可以帮忙吗?

代码写入zip文件:

public void zipFiles(File contentFile, File navFile)
{
    byte[] buffer = new byte[1024];

    try{
        // i dont have idea on what to give here in fileoutputstream
        FileOutputStream fos = new FileOutputStream("C:\\MyFile.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
        ZipEntry ze= new ZipEntry(contentFile.toString());
        zos.putNextEntry(ze);
        FileInputStream in = new FileInputStream(contentFile.toString());

        int len;
        while ((len = in.read(buffer)) > 0) {
            zos.write(buffer, 0, len);
        }

        in.close();
        zos.closeEntry();

        //remember close it
        zos.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace();
    }
}

我可以在 fileoutputstream 中提供什么? contentfile 和 navigationfile 是我从代码创建的文件。


如果你的服务器是servlet容器,只需写一个HttpServlet它负责压缩和提供文件。

您可以将 servlet 响应的输出流传递给构造函数ZipOutputStream并且 zip 文件将作为 servlet 响应发送:

ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());

不要忘记在压缩之前设置响应 mime 类型,例如:

response.setContentType("application/zip");

全图:

public class DownloadServlet extends HttpServlet {

    @Override
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        response.setContentType("application/zip");
        response.setHeader("Content-Disposition", "attachment; filename=data.zip");

        // You might also wanna disable caching the response
        // here by setting other headers...

        try ( ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()) ) {
            // Add zip entries you want to include in the zip file
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在服务器上创建 Zip 文件并使用 java 下载该 zip 的相关文章

  • 如何创建约束输入流以仅读取文件的一部分?

    我想创建一个仅限于文件中一定范围的字节的输入流 例如从位置 0 到 100 的字节 这样 一旦到达第 100 个字节 客户端代码就应该看到 EOF The read 的方法InputStream一次读取一个字节 你可以写一个子类InputS
  • JMenuItem:如何设置具有3个键的加速器?

    请看下面的代码 import java awt import java awt event import javax swing public class MenuActions extends JFrame private JMenuBa
  • 您最好的 Swing 设计模式和技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • struts2应用程序未运行

    我是 Maven 和 struts2 的新手 当我尝试运行我的程序时出现以下错误 严重 调度程序初始化失败 无法加载配置 操作 文件 E workspace metadata plugins org eclipse wst server c
  • Java 中的双精度小数格式

    我在格式化双精度数的小数时遇到一些问题 如果我有双重值 例如4 0 如何格式化小数 使其变为 4 00 其中一种方法是使用数字格式 http docs oracle com javase tutorial i18n format decim
  • 如何解决Spring Data JPA中的N+1问题?

    我使用 Spring Data JPA 作为持久层 并且面临 N 1 问题 我还使用规范 API 因为我发现很难解决 N 1 问题 请帮忙 Entity public class PopulationHealth Id private in
  • Java:输入/使用“try-catch”块的开销?

    这个问题说明了一切 尽管命中率不是很高 我测得速度慢了 1 5 倍到 2 倍 但使用 try catch 的字节码和不使用 try catch 的字节码之间没有区别 那么是什么让它通常变慢呢 PL 请注意 问题不是抛出异常的开销 而是进入
  • Groovy 2.0.1,我自己的类上有 GroovyCastException?

    我在我的网络应用程序项目中广泛使用 Groovy 类 我可以创建类型的实例 定义为 groovy 类 但以后永远不能转换回它 GroovyCastException发生 org codehaus groovy runtime typehan
  • 从命令行进行 Liquibase 回滚不起作用

    我正在 Windows 环境中执行一个 Tomcat 应用程序 部署时会在 Oracle 数据库上创建 更新数据库架构 为此 我使用 Liquibase SDK 3 3 2 所以基本上我调用 SDK 并告诉它从我的changelog xml
  • Hibernate 时间戳 - 毫秒精度

    似乎以毫秒精度存储时间戳是休眠的一个已知问题 我在数据库中的字段最初设置为时间戳 3 但我也尝试过日期时间 3 不幸的是 它没有任何区别 我尝试过使用 Timestamp 和 Date 类 最近我开始使用 joda time 库 经过所有这
  • LoggerFactory.getLogger(ClassName.class) 与 LoggerFactory.getLogger(this.getClass().getName())

    我正在努力提高我的 Java 优化技能 为了实现这一目标 我制作了一个旧程序 并且正在尽力使其变得更好 在此程序中 我使用 SL4J 进行日志记录 为了获取记录器 我做了 private static final Logger logger
  • Java 8 LocalDate Jackson 格式

    For java util Date当我做 JsonFormat shape JsonFormat Shape STRING pattern dd MM yyyy private Date dateOfBirth 然后在我发送时在 JSON
  • 带句点和逗号的自定义格式数字

    有点相关这个问题 https stackoverflow com questions 4738853 java decimal format parse to return double value with specified numbe
  • Spring MVC @RequestBody 不适用于 jquery ajax?

    这是我的ajax请求 var dataModel name1 value1 name2 value2 ajax url testURL type POST async false contentType application json d
  • 为什么 CompletableFuture.allOf 声明为 CompletableFuture

    Why is CompletableFuture allOf声明为CompletableFuture
  • 找出网络上所有活动机器的IP

    如何找到 LAN 上所有当前活动计算机的 IP 如何编写一个可以在任何子网上运行的通用程序 我目前正在这样做 尝试 isReachable 是否到达我子网上的所有机器 如果他们这样做 请存储他们的 IP 地址 无论如何 是否有其他方法可以手
  • 大十进制减法

    我想减去2double值 我尝试了以下代码 double val1 2 0 double val2 1 10 System out println val1 val2 我得到的输出为 0 8999999999999999 为了获得输出0 9
  • 如何在mockito中模拟Spring依赖

    我正在尝试嘲笑 Spring Beans 我能够模拟对象 B 和 C 但无法模拟 B 类内的对象 插入类 A 中的模拟包含 B 但 X 和 Y 为空 即使我嘲笑了它们 Mockito 有没有办法模拟 Spring bean 中成员的对象 N
  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用
  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题

随机推荐