【问题标题】:Download a zip from a servlet Java从 servlet Java 下载 zip
【发布时间】:2017-08-31 04:00:09
【问题描述】:

我不明白为什么这这么难而且每个人都有自己的实现......

所以在我的服务器中,我生成了一个.zip 文件,我希望用户能够在单击时下载该文件。

所以我设置了服务器成功接收的请求,现在,我正在努力将字节数组写入输出。

这是我的响应代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Downloading clusters.zip");

        /* Generate the directory on the server, then zip it. */
        clustersToFiles();
        zipClusters();
        /* Now the zip is saved on zipFullPath */

        System.out.println("Done generating the .zip");

        String parent_dir = System.getProperty("catalina.base");
        String filename = "clusters.zip";
        String zipFullPath = parent_dir + "/" + filename;

        response.setContentType("application/zip");
        response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
        OutputStream out = response.getOutputStream();

        FileInputStream fis = new FileInputStream(zipFullPath);
        int bytes;
        while ((bytes = fis.read()) != -1) {
            System.out.println(bytes);
            out.write(bytes);
        }
        fis.close();
        response.flushBuffer();

        System.out.println(".zip file downloaded at client successfully");
}

【问题讨论】:

  • @pandaadb 如果你认为frameworks 可能会在这里帮助我,无论如何......
  • 实际上,我认为您的问题不是 servlet 部分,而是复制部分。如果您愿意,我可以发布球衣示例以供下载。至于框架,可以通过例如将任何文件复制到输出流中来实现。 google commons:Files.copy(new File("path/to/zip/file"), output); 另外,如果这适用于普通文件,您确定您生成的 zip 文件不只是空的吗?您尝试复制的文件不应该有所不同

标签: java servlets


【解决方案1】:

下载的文件是 ZIP 的事实并不相关(内容类型除外),您只想下载二进制文件。

PrintWriter不擅长,这个writer是用来写文本输出的,你用的write(int)方法:

写入单个字符

只需使用低级普通OutputStream,它的write(int) 方法:

将指定的字节写入此输出流。

那就去吧:

OutputStream out = response.getOutputStream();

您可能会在这个问题中找到更多方法:Implementing a simple file download servlet

【讨论】:

  • 感谢您的宝贵时间。我已经更新了代码。 bytes 已打印,所以我猜它正在工作。但下载永远不会开始。你认为这与通过AJAX 请求完成对servlet 的调用有什么关系吗?
  • @Jack :我真的不知道(编辑;下面的链接应该),但请先尝试不使用 ajax,以至少确保 servlet 按预期工作。哦,看看这个可以回答你对 Ajax 的疑问的问题:stackoverflow.com/questions/3502267/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多