3

ForceDownloadのコードは次のとおりです。

        // 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に表示されるダイアログボックスには、次のように表示されます。ファイルを開きます。ファイル名は「How」と表示されます(名前は「Application.txtの使用方法」)。私が自分自身のためにファイル名を書き込もうとした場合に私が言及した様:

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

同じように見えます。助けてください!

4

2 に答える 2

2

Mimeファイルの名前は二重引用符で囲む必要があります。

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

これはRFC2616(HTTP 1.1)にあります。

コンテンツ-処分:添付ファイル; filename = "fname.ext"

RFC 6266で改訂され、スペースなどの許可されていない文字が含まれていない場合でも、ファイル名を引用符なしで使用できるようになりました。

コンテンツ-処分:添付ファイル; filename = 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 に答える