0

*.doc *.png *.xls のようなファイルをワニス キャッシュとして使用します。

キャッシュからファイルを取得している間はうまく機能しますが、* .xls.

私のURIはのようなもの/attachment/show?fileId=ewer232ewe2121eeddsdです。キャッシュから .xls ファイルを要求すると、拡張子のない名前のファイルが返されますshow

私のサーバーコードは次のとおりです。

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 を設定する方法はありますか?

4

1 に答える 1

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;」を実行すると、ヘッダーを自由に追加および削除できます。または「unsetberesp.http.XXX;」vcl_fetchで。

あなたの主な質問として、MIMEエンベロープ(ここにヘッダーの例)を追加することが役立つかどうかを調べます。

于 2012-10-23T08:22:54.393 に答える