如何从varnish缓存中获取正确的.xls文件?

时间:2012-10-22 02:25:38

标签: java caching varnish

我使用varnish cache一些文件,如* .doc * .png * .xls。

我从缓存中获取文件但* .xls。

我的URI就像/attachment/show?fileId=ewer232ewe2121eeddsd。当我从缓存中请求.xls文件时,它将返回名为show whitout extension的文件。

我的服务器代码是:

if (StringUtil.null2Trim(attachment.getExtension()).equals("doc")
                    || StringUtil.null2Trim(attachment.getExtension()).equals("docx")
                    || StringUtil.null2Trim(attachment.getExtension()).equals("xlsx")
                    || StringUtil.null2Trim(attachment.getExtension()).equals("xls")) {
                response.setHeader("Content-Disposition", "attachment; filename=\""
                        + StringUtil.gbk2Iso(attachment.getName()) + "\"");
                if (StringUtil.null2Trim(attachment.getExtension()).indexOf("doc") != -1) {
                    response.setContentType("application/msword");
                }
                if (StringUtil.null2Trim(attachment.getExtension()).indexOf("xls") != -1) {
                    response.setContentType("application/vnd.ms-excel");
                }

            } else {
                if (StringUtil.null2Trim(attachment.getExtension()).equals("jpg")) {
                    response.setContentType("image/jpeg");
                } else if (StringUtil.null2Trim(attachment.getExtension()).equals("png")) {
                    response.setContentType("image/x-png");
                } else {
                    response.setContentType("image/" + attachment.getExtension());
                }
            }

我的问题是:为什么我不能像attachment.getName()+".xls"那样获得正确的文件全名,以及如何解决它。

PS:有没有办法在varnish(vcl)中设置ContentType?

1 个答案:

答案 0 :(得分:1)

让我回答最后一个问题;你可以覆盖Varnish中的任何HTTP响应头。​​

使用以下VCL代码段:

sub vcl_fetch {
    if (req.url ~ ".xls$") {
        set beresp.http.content-type = "application/vnd.ms-excel";
    }
}

通常,您可以通过执行“set beresp.http.XXX = YYY;”来随意添加和删除标题。或者“取消设置beresp.http.XXX;”在vcl_fetch中。

对于您的主要问题,我将探讨添加MIME信封(标题example here)是否有帮助。