どっとねっとふぁん

C# Tips And Samples
in 検索

12.ファイルのダウンロード

最新の投稿は、投稿日時: 06-23-2005, 4:50 午後 投稿者: ono です。スレッドには 0 件の返答があります。
投稿のソート: 前へ 次へ
  •  06-23-2005, 4:50 午後 58

    12.ファイルのダウンロード

    Webからサーバ上にあるファイルをダウンロードしたいという場合があります。
    この場合、ContentTypeとファイル名をただしく設定し、ダウンロードするファイルをResponseストリームの中に書きだせばOKです。

    以下はWordファイルをダウンロードするサンプルです。

    #ファイル名を日本語にすると化けてしまいます。
     Web.configの設定でうまくいく、という情報もあるのですが、手元では正しく動かせていません。
    -------------------------------------------------------
    <%@ Page Language="C#" %>
    <html>
    <head>
    <script runat="server">
    void button_Click(object sender, EventArgs e)
    {
        Response.ContentType="application/ms-word";
        Response.AddHeader("content-disposition","attachment; filename=sample.doc");
        Response.WriteFile("sample.doc");
        Response.End();
    }
    </script>
    </head>
    <body>
    <form runat="server">
    <asp:button id="Button1" Text = "ファイルダウンロード" runat="server" OnClick="button_Click" />
    </form>
    </body>
    </html>
    
    -------------------------------------------------------
    注意する必要があるのは、Response.End()を利用してストリームの書き込みをこの時点で中断することです。
    この処理を行わないと、ダウンロードしたファイルの最後にこのaspxファイルが生成するHTMLの内容が書き込まれてしまいます。

    #この動作により、プログラムからResponseストリームに書き込むのはaspxファイルがHTMLを生成するより前、ということがわかります。

    なお、ファイルのダウンロードのちょっとした応用で次のようなことも可能です。
    ExcelがHTMLを解釈できることを利用したサンプルです。
    -------------------------------------------------------
    <%@ Page Language="C#" %>
    <html>
    <head>
    <script runat="server">
    void button_Click(object sender, EventArgs e)
    {
        Response.ContentType="application/ms-excel";
        Response.AddHeader("content-disposition","attachment; filename=sample.xls");
        Response.Write("<html>");
        Response.Write("<body>");
        Response.Write("<table border=1>");
        Response.Write("<tr><td>test1-1</td><td>test1-2</td><td>test1-3</td></tr>");
        Response.Write("<tr><td>test2-1</td><td>test2-2</td><td>test2-3</td></tr>");
        Response.Write("<tr><td style='color: red;'>test3-1</td><td>");
        Response.Write( DateTime.Now );
        Response.Write("</td><td>test3-3</td></tr>");
        Response.Write("</table>");
        Response.Write("</body>");
        Response.Write("</html>");
        Response.End();
    }
    </script>
    </head>
    <body>
    <form runat="server">
    <asp:button id="Button1" Text = "ファイルダウンロード" runat="server" OnClick="button_Click" />
    </form>
    </body>
    </html>
    
    -------------------------------------------------------


    追記:

    ダウンロードするファイルに日本語を利用したい場合の方法がGotDotNet JapanのMLで紹介されていました。
    -------------------------------------------------------
    <%@ Page Language="C#" %>
    <html>
    <head>
    <script runat="server">
    void button_Click(object sender, EventArgs e)
    {
        Response.ContentType="application/ms-word";
        string fname = System.Web.HttpUtility.UrlEncode("てすと.doc");
        Response.AddHeader("content-disposition","attachment; filename=" + fname);
        Response.WriteFile("sample.doc");
        Response.End();
    }
    </script>
    </head>
    <body>
    <form runat="server">
    <asp:button id="Button1" Text = "ファイルダウンロード" runat="server" OnClick="button_Click" />
    </form>
    </body>
    </html>
    
    -------------------------------------------------------
    上記のように、利用するファイル名をUrlEncodeしてあげればOKです。


    あおい情報システム株式会社
     小野修司(どっとねっとふぁん)
RSS ニュースフィードで参照
SkinName:iroha_CS2
Powered by Community Server, by Telligent Systems