3

这是我的强制下载代码:

        // URL = Download.aspx?Url=How to use the Application.txt    

        string q = Request.QueryString["Url"].ToString();

        Response.Clear();
        Response.AddHeader("Content-disposition", "Attachment; Filename=" + file);
        Response.ContentType = "Text/Plain";
        Response.WriteFile(Server.MapPath("Directory/" + q));
        Response.End();

Firefox 中出现的对话框显示:您将打开文件:并且文件名显示为如何(名称应为:如何使用 Application.txt)。如果我尝试为自己编写文件名,我提到的 sama:

Response.AddHeader("Content-disposition", "Attachment; Filename=How to use the Application.txt");

同样的出现。请帮忙!

4

2 回答 2

2

Mime 文件名应该用双引号引起来。

Response.AddHeader("Content-disposition", 
                   "Attachment; Filename=\"" + file + "\"");
    

这可以在RFC 2616(HTTP 1.1)中找到

内容处置:附件;文件名="fname.ext"

在RFC 6266中进行了修订,如果文件名不包含空格等不允许的字符,则也允许不带引号的文件名。

内容处置:附件;文件名=example.html

于 2012-08-17T06:49:01.750 回答
2

您应该在文件名周围加上双引号。以下是如何做到这一点:

    string q = Request.QueryString["Url"].ToString();

    Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment; filename=\""
        + file + "\"");
    Response.ContentType = "text/plain";
    Response.WriteFile(Server.MapPath(d + q));
    Response.End();

请注意,我还将您的字符串大写/小写更改为现在的“Content-Disposition”、“attachment”、“filename”、“text/plain”。您应该以这种方式使用它们,以免在处理非常严格的浏览器时遇到麻烦。

如果这不能正常工作,请尝试:

    Response.AddHeader("Content-Disposition", "Attachment;
        Filename=\"" + HttpUtility.UrlEncode(file) + "\"");

然后文件名中的空格是 URL 编码的。

于 2012-08-17T06:56:25.863 回答