无法从服务器正确下载创建的压缩文件

拉奇特·M·加格(Rachit M Garg)

我有一个文件夹,尝试将其压缩,而不是在单击按钮时将其下载到用户的计算机上。我能够正确生成zip文件。我已经编写了代码来下载它,但是在将其从服务器下载到用户计算机之后。它显示无法打开zip文件,因为它是无效的。

这是怎么引起的,我该如何解决?这是执行下载功能的代码。

public String getAsZip() {                              
        try {
        FacesContext ctx = FacesContext.getCurrentInstance();
        ExternalContext etx = ctx.getExternalContext();
        HttpServletResponse response = (HttpServletResponse) etx
                .getResponse();
        ServletOutputStream zipFileOutputStream = response
                .getOutputStream();
        response.setContentType("application/octet-stream");
        response.setHeader(
                "Content-Disposition",
                "attachment; filename=" + downloadLink.substring(downloadLink.lastIndexOf("\\") + 1,downloadLink.length()));
        response.setHeader("Cache-Control", "no-cache");

        File zipFile = new File(downloadLink);
        FileInputStream stream = new FileInputStream(zipFile);
        response.setContentLength(stream.available());

        int length = 0;
        byte[] bbuf = new byte[response.getBufferSize()];
        BufferedInputStream in = new BufferedInputStream(stream);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        while ((length = in.read(bbuf)) > 0) {
            baos.write(bbuf, 0, length);
        }

        zipFileOutputStream.write(baos.toByteArray());
        zipFileOutputStream.flush();
        zipFileOutputStream.close();
        response.flushBuffer();
        in.close();
        stream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "successZip";
}
没有人

请参见JSF 2.0 RenderResponse和ResponseComplete

问题在于您不调用FacesContext#responseComplete()。这就是为什么在您添加下载并将其附加到响应之后,JSF仍将呈现视图。这将导致zipfile损坏。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章