当前位置: 首页 > 知识库问答 >
问题:

从Java servlet下载zip

广亮
2023-03-14

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

所以在我的服务器中,我生成了一个. 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");
}

共有1个答案

莫承运
2023-03-14

下载的文件是ZIP文件这一事实与此无关(内容类型除外),您只想下载一个二进制文件。

PrintWriter不擅长于此,此编写器用于编写文本输出,并且您正在使用的写(int)方法:

写入单个字符。

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

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

那就去吧:

OutputStream out = response.getOutputStream();

在这个问题中,您可能会找到更多的方法:实现一个简单的文件下载servlet

 类似资料:
  • 本文向大家介绍JavaServlet的文件上传和下载实现方法,包括了JavaServlet的文件上传和下载实现方法的使用技巧和注意事项,需要的朋友参考一下 先分析一下上传文件的流程 1-先通过前段页面中的选择文件选择要上传的图片 index.jsp 2-点击提交按钮,通过ajax的文件上传访问服务器端 common.js   3-服务器端响应保存或者下载 保存上传文件的FileUpload.jav

  • 我试图下载从我的仓库在GitHub 我使用,这是返回: 如何创建<code>设置。py和我必须放什么?

  • 主要内容:在 pom.xml 中配置,在 setting 中配置Nexus 作为最流行的 Maven 私服之一,使用它主要目的之一:代理远程仓库,即当 Maven 需要下载构件到本地仓库使用时,不再请求外部的远程仓库,而直接从 Nexus 中下载。本节我们将介绍如何配置 Maven 从 Nexus 下载构件。 将 Nexus 的代理仓库配置到 Maven 项目中,用它们代替外部的远程仓库,即可实现 Maven 从 Nexus 下载构件。 在 pom.xml 中

  • 我目前正在使用apollo android和iOs库,这需要我下载模式。是否可以从graphicql下载模式?目前,我一直从命令行收到错误,无法从GraphiQL界面手动下载。提前谢谢!

  • 我正在尝试将html表下载为cvs文件。我的代码正在工作,但是,它正在下载一个名为“未知”的文件,没有扩展名。csv'。如果我手动添加扩展名,csv文件将正确显示除第一行之外的所有内容,该行还包含html代码(请参见所附图片) 我做错了什么? 以下是脚本:

  • 从swarm网络下载文件和目录到缓冲buffer中,或者磁盘中(仅限node.js)。 调用: web3.bzz.download(bzzHash [, localpath]) 参数: bzzHash - String: 要下载的文件或目录的哈希值。如果哈希对应一个裸文件,则函数返回Buffer, 如果是一个Manifest文件,函数将返回目录结构。如果给定localpath参数,函数将返回下载