最近のトラックバック

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Google AdSense2

« C#でCSV・TSVファイル作成 | トップページ | ASP.NET(C#)でファイルダウンロードしながら画面更新 »

ASP.NET(C#)でファイルダウンロード

ASP.NET(C#)でファイルダウンロードのサンプルコードを作成してみた。



ダウンロード処理のメインソースは以下の通り

// Response情報クリア
Response.ClearContent();
// HTTPヘッダー情報設定
Response.AddHeader("Content-Disposition", "attachment;filename=①ファイル名");
Response.ContentType = ②MIME;
// ファイル書込(データによりResponse.WriteFile()、Response.Write()、Response.BinaryWrite()を使い分ける。)
Response.WriteFile(sFilePath);
// レスポンス終了
Response.End();


上記ソースのうち「①ファイル名」と「②MIME」に関しては注意が必要である。

■①ファイル名について
ファイル名に日本語が含まれる場合、IEとIE以外のブラウザで挙動が異なるため注意する必要がある。
日本語を含むファイル名はIE以外のブラウザの場合は問題ないが、IEの場合ファイルダウンロードダイアログで文字化けを起こす。
このためブラウザがIEの場合、URLエンコードをする必要がある。

HttpUtility.UrlEncode(sFileName)


■②MIME
Response.ContentTypeにはファイル形式毎にコンテンツタイプを指定する必要がある。

拡張子とMIMEタイプ - とほほのWWW入門では、 MIMEを以下のように説明している。
Webの世界では拡張子という概念と、もうひとつ『MIMEタイプ』という概念があります。MIMEタイプとは「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。

MIMEの一例を挙げると次の通り。
ファイル形式 一般的な拡張子 MIMEタイプ
テキストファイル .txt text/plain
HTML .htm,.html text/html
CSVファイル .csv text/comma-separated-values
TSVファイル .txt, .tsv text/tab-separated-values
XMLファイル .xml text/xml
Microsoft Wordファイル .doc, .docx application/msword
Microsoft Excelファイル .xls, xlsx application/msexcel
Microsoft PowerPointファイル .ppt, pptx application/mspowerpoint
PDFファイル .pdf application/pdf
ビットマップファイル .bmp image/bmp
GIFファイル .gif image/gif
JPEGファイル .jpg image/jpeg
PNGファイル.png .png image/png
ZIPファイル .zip application/zip
LZHファイル .lzh application/lha
スタイルシートファイル .css text/css
JavaScriptファイル .js text/javascript
VBScriptファイル .vbs text/vbscript
実行ファイル .exe application/octet-stream

参考:MIMEタイプ一覧


ファイルダウンロードのサンプルソースを記述する。

実行結果及びASP.NETソースコードの確認
 :
 :
<script runat="server">
    /// <summary>
    /// テキストファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnTxt_Click(object sender, EventArgs e)
    {
        fnDownloadFile("テキストファイル.txt", "text/plain");
    }
    /// <summary>
    /// HTMLファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnHtm_Click(object sender, EventArgs e)
    {
        fnDownloadFile("HTMLファイル.htm", "text/html");
    }
    /// <summary>
    /// CSVファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCsv_Click(object sender, EventArgs e)
    {
        fnDownloadFile("CSVファイル.csv", "text/comma-separated-values");
    }
    /// <summary>
    /// TSVファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnTsv_Click(object sender, EventArgs e)
    {
        fnDownloadFile("TSVファイル.txt", "text/tab-separated-values");
    }
    /// <summary>
    /// XMLファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnXml_Click(object sender, EventArgs e)
    {
        fnDownloadFile("XMLファイル.xml", "text/xml");
    }
    /// <summary>
    /// Wordファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnDoc_Click(object sender, EventArgs e)
    {
        fnDownloadFile("Wordファイル.doc", "application/msword");
    }
    /// <summary>
    /// Excelファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnXls_Click(object sender, EventArgs e)
    {
        fnDownloadFile("Excelファイル.xls", "application/msexcel");
    }
    /// <summary>
    /// PowerPointファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPpt_Click(object sender, EventArgs e)
    {
        fnDownloadFile("PowerPointファイル.ppt", "application/mspowerpoint");
    }
    /// <summary>
    /// PDFファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPdf_Click(object sender, EventArgs e)
    {
        fnDownloadFile("PDFファイル.pdf", "application/pdf");
    }
    /// <summary>
    /// ビットマップファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnBmp_Click(object sender, EventArgs e)
    {
        fnDownloadFile("ビットマップファイル.bmp", "image/bmp");
    }
    /// <summary>
    /// GIFファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnGif_Click(object sender, EventArgs e)
    {
        fnDownloadFile("GIFファイル.gif", "image/gif");
    }
    /// <summary>
    /// JPEGファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnJpg_Click(object sender, EventArgs e)
    {
        fnDownloadFile("JPEGファイル.jpg", "image/jpeg");
    }
    /// <summary>
    /// PNGファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPng_Click(object sender, EventArgs e)
    {
        fnDownloadFile("PNGファイル.png", "image/png");
    }
    /// <summary>
    /// ZIPファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnZip_Click(object sender, EventArgs e)
    {
        //fnDownloadFile("ZIPファイル.zip", "application/zip"); // MIMEを指定すると動かない場合がある
        fnDownloadFile("ZIPファイル.zip", "");
    }
    /// <summary>
    /// LZHファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnLzh_Click(object sender, EventArgs e)
    {
        fnDownloadFile("LZHファイル.lzh", "application/lha");
    }
    /// <summary>
    /// スタイルシートファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCss_Click(object sender, EventArgs e)
    {
        fnDownloadFile("スタイルシートファイル.css", "text/css");
    }
    /// <summary>
    /// JavaScriptファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnJs_Click(object sender, EventArgs e)
    {
        fnDownloadFile("JavaScriptファイル.js", "text/javascript");
    }
    /// <summary>
    /// VBScriptファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnVbs_Click(object sender, EventArgs e)
    {
        fnDownloadFile("VBScriptファイル.vbs", "text/vbscript");
    }
    /// <summary>
    /// 実行ファイルダウンロード
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnExe_Click(object sender, EventArgs e)
    {
        fnDownloadFile("実行ファイル.exe", "application/octet-stream");
    }
    /// <summary>
    /// ファイルダウンロード
    /// </summary>
    /// <param name="sFileName"></param>
    /// <param name="sMIME"></param>
    public void fnDownloadFile(string sFileName, string sMIME)
    {
        string sFilePath;           // ファイルパス
        string sDownloadFileName;   // ダウンロードファイル名
        //-----------------------------------------------------------------------------------------
        // 物理ファイルパス取得
        //-----------------------------------------------------------------------------------------
        sFilePath = MapPath(string.Format(@"./File/{0}", sFileName));
        //-----------------------------------------------------------------------------------------
        // 日本語ファイル名を考慮したダウンロードファイル名作成
        //-----------------------------------------------------------------------------------------
        if (Request.Browser.Browser == "IE")
        {
            // IEの場合、ファイル名をURLエンコード
            sDownloadFileName = HttpUtility.UrlEncode(sFileName);
        }
        else
        {
            // IE以外はファイル名は無加工
            sDownloadFileName = sFileName;
        }
        //-----------------------------------------------------------------------------------------
        // ダウンロード処理
        //-----------------------------------------------------------------------------------------
        // Response情報クリア
        Response.ClearContent();
        // バッファリング
        Response.Buffer = true;
        // HTTPヘッダー情報設定
        Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", sDownloadFileName));
        Response.ContentType = sMIME;
        // ファイル書込
        Response.WriteFile(sFilePath);
        // フラッシュ
        Response.Flush();
        // レスポンス終了
        Response.End();
    }
</script>
<h1>ファイルダウンロード</h1>
<!-- コンテンツ説明 -->
<div class="contents_info">
    ASP.NETからファイルをダウンロードするサンプルです。<br />
</div>
<!-- コンテンツ -->
<asp:Button ID="btnTxt" runat="server" Text="テキストファイルダウンロード"  onclick="btnTxt_Click" /><br />
<asp:Button ID="btnHtm" runat="server" Text="HTMLファイルダウンロード"  onclick="btnHtm_Click" /><br />
<asp:Button ID="btnXml" runat="server" Text="Xmlファイルのダウンロード"  onclick="btnXml_Click" /><br />
<asp:Button ID="btnCsv" runat="server" Text="CSVファイルダウンロード" onclick="btnCsv_Click" /><br />
<asp:Button ID="btnTsv" runat="server" Text="TSVファイルダウンロード" onclick="btnTsv_Click" /><br />
<asp:Button ID="btnDoc" runat="server" Text="Wordファイルダウンロード" onclick="btnDoc_Click" /><br />
<asp:Button ID="btnXls" runat="server" Text="Excelファイルダウンロード" onclick="btnXls_Click" /><br />
<asp:Button ID="btnPpt" runat="server" Text="PowerPointファイルダウンロード" onclick="btnPpt_Click" /><br />
<asp:Button ID="btnPdf" runat="server" Text="PDFファイルダウンロード"  onclick="btnPdf_Click" /><br />
<asp:Button ID="btnBmp" runat="server" Text="ビットマップファイルダウンロード" onclick="btnBmp_Click" /><br />
<asp:Button ID="btnGif" runat="server" Text="GIFファイルダウンロード"  onclick="btnGif_Click" /><br />
<asp:Button ID="btnJpg" runat="server" Text="JPEGファイルダウンロード" onclick="btnJpg_Click" /><br />
<asp:Button ID="btnPng" runat="server" Text="PNGファイルダウンロード" onclick="btnPng_Click" /><br />
<asp:Button ID="btnZip" runat="server" Text="ZIPファイルダウンロード" onclick="btnZip_Click" /><br />
<asp:Button ID="btnLzh" runat="server" Text="LZHファイルダウンロード" onclick="btnLzh_Click" /><br />
<asp:Button ID="btnCss" runat="server" Text="スタイルシート(CSS)ファイルダウンロード" onclick="btnCss_Click" /><br />
<asp:Button ID="btnVbs" runat="server" Text="VBScriptファイルダウンロード" onclick="btnVbs_Click" /><br />
<asp:Button ID="btnJs"  runat="server" Text="JavaScriptファイルダウンロード" onclick="btnJs_Click" /><br />
<asp:Button ID="btnExe" runat="server" Text="実行ファイルダウンロード" onclick="btnExe_Click" /><br />
<br />
 :
 :


  • ASP.NET(C#)でファイルダウンロードしながら画面更新
  • ASP.NET(C#)でバイナリファイルをブラウザ表示
  • ASP.NET(C#)でIEにOfficeドキュメントを表示
  • ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ

  • 拡張子とMIMEタイプ - とほほのWWW入門
  • MIMEタイプ一覧
  • 方法 : ASP.NET Web ページでブラウザの種類を検出する

  • « C#でCSV・TSVファイル作成 | トップページ | ASP.NET(C#)でファイルダウンロードしながら画面更新 »

    ASP.NETサンプル」カテゴリの記事

    コメント

    コメントを書く

    (ウェブ上には掲載しません)

    トラックバック

    この記事のトラックバックURL:
    http://app.cocolog-nifty.com/t/trackback/532391/45477804

    この記事へのトラックバック一覧です: ASP.NET(C#)でファイルダウンロード:

    « C#でCSV・TSVファイル作成 | トップページ | ASP.NET(C#)でファイルダウンロードしながら画面更新 »

    Google AdSense


    • ---

    Amazon ウィジェット

    • ウィジェット

    @niyo_naのツイート

    無料ブログはココログ

    Google Analytics