【问题标题】:How to write zip file into httpresponse如何将 zip 文件写入 httpresponse
【发布时间】:2013-07-05 15:47:49
【问题描述】:

我创建了 zip 文件 (sample.zip),其中包含一些没有问题的文件。当我打开 sample.zip 时,它包含预期的文件。

我想将该 zip 文件放入 http 响应中。目前我正在使用以下内容:

        response.setContentType("application/zip");
        response.addHeader("Content-Disposition", "attachment; filename="+"sampleZip.zip");
        response.setContentLength(2048);
        response.setHeader("Set-Cookie", "fileDownload=true; path=/");
        FileInputStream fileInputStream = new FileInputStream("sample.zip");
        OutputStream responseOutputStream = response.getOutputStream();
        int bytes;
        while ((bytes = fileInputStream.read()) != -1) {
            responseOutputStream.write(bytes);
        }
        response.flushBuffer();

现在它在我的浏览器默认下载位置下载 zip 文件。但是当我打开那个 zip 文件时,它会显示

无法打开文件:它似乎不是有效的存档

请帮我解决这个问题。

【问题讨论】:

  • 尝试将 content-type 设置为 application/x-zip-compressed 看看是否有效
  • Sotirios Delimanolis : 你能更新一下写字节的代码吗
  • 嗯,你一次复制一个字节,这远没有效率......但它应该正确地复制。
  • 您指定的内容长度,是否为常数:您确定这是 zip 文件的大小吗?

标签: java jquery http-headers zip


【解决方案1】:

我觉得这段代码不错。但是您正在设置可能是问题的默认内容长度。创建 File 实例并使用 file.length() 方法设置内容长度并为您的输入流使用相同的文件。逐字节读取也不是一个好主意。如果可能,使用 apache 的 IOUtils.copy() 将数据从输入流复制到 ServletOutputStream。

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 1970-01-01
    • 2021-04-30
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多