none
IIS7.0で拡張子「.txt」のダウンロード RRS feed

  • 質問

  • WEBサーバOS:Windows 7

    VS2005(ASP.NET(VB))にてファイルのダウンロード処理を実施しています。

    下記のような実装方法で「.txt」のダウンロード処理を実装しております。

        Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim sFileName As String = "AAAAA.txt"

            Dim MS As New System.IO.MemoryStream()
            Dim uniEncoding As New UnicodeEncoding()
            Dim firstString As Byte() = uniEncoding.GetBytes("AAAAA")
            ms.Write(firstString, 0, firstString.Length)

            Response.Clear()
            Response.ContentType = "text/plain"
            Response.AddHeader("Content-Disposition", "attachment;filename=" & sFileName)
            Response.BinaryWrite(ms.ToArray())

            ms.Flush()
            ms.Close()

            Response.End()

        End Sub

    処理実施時、ファイルのダウンロードダイアログが開いた後、「開く」を実施後、「AAAAA.txt」が2つ開かれてしまいます。

    (ファイルのダウンロードダイアログは1回しか開きません。)

    2つ開かれてしまう原因が分からず、困っています。

    原因に心当たりがあれば、ご教授願えないでしょうか。

    お願いいたします。

    2010年7月15日 2:13

回答

  • このコードだけ見ている分には問題なさそうですが、Page_LoadイベントなどPostBack時に別の動作が関係している可能性はないですかね?

    • 回答の候補に設定 山本春海 2010年7月30日 6:56
    • 回答としてマーク 山本春海 2010年12月8日 6:17
    2010年7月15日 8:15
  • Vista Ultimate のローカル IIS7 環境で試してみましたが、再現しま
    せん(開くメモ帳は1つのみです)。

    アップされたコードは一字一句問題のコードと違いないですか? 定
    義で MS になっているのが ms になっていたりしてますが、VB は大文
    字小文字の区別はなかったでしたっけ?

    それから、これは問題とは関係ないかもしれませんが、コードを見る限
    り MemoryStream を使う必要はなくて、単純に

    Response.BinaryWrite(firstString)

    とすれば事足りるはずですけど。

    • 回答の候補に設定 山本春海 2010年7月30日 6:56
    • 回答としてマーク 山本春海 2010年12月8日 6:17
    2010年7月15日 13:09

すべての返信

  • このコードだけ見ている分には問題なさそうですが、Page_LoadイベントなどPostBack時に別の動作が関係している可能性はないですかね?

    • 回答の候補に設定 山本春海 2010年7月30日 6:56
    • 回答としてマーク 山本春海 2010年12月8日 6:17
    2010年7月15日 8:15
  • Page_Loadイベントでは処理は何も行っていません。

    ちなみにWindow XP(IIS6.0)をWebサーバにして同ソースで実行時は1つしか開かれません…。

    また、拡張子を「.log」等にした場合には1つしか開きません。

     

    2010年7月15日 9:58
  • Vista Ultimate のローカル IIS7 環境で試してみましたが、再現しま
    せん(開くメモ帳は1つのみです)。

    アップされたコードは一字一句問題のコードと違いないですか? 定
    義で MS になっているのが ms になっていたりしてますが、VB は大文
    字小文字の区別はなかったでしたっけ?

    それから、これは問題とは関係ないかもしれませんが、コードを見る限
    り MemoryStream を使う必要はなくて、単純に

    Response.BinaryWrite(firstString)

    とすれば事足りるはずですけど。

    • 回答の候補に設定 山本春海 2010年7月30日 6:56
    • 回答としてマーク 山本春海 2010年12月8日 6:17
    2010年7月15日 13:09