ASP.NETでダウンロードしたファイルの実装コード

2963 ワード

これは筆者がよく聞かれる質問で、どのようにASPを通じてNETはファイルをダウンロードして、この問題は大きくて小さくて、私たちはまず小さい頃から始めます.ユーザーにファイルをダウンロードさせるには、Responseを通じて最も簡単な方法です.Redirect命令:
  Response.Redirect("test.doc")
上の行の命令をButtonのClickイベントに置くことができます.ユーザーがボタンをクリックすると、ページがワードファイルに転送され、ダウンロードの効果をもたらします.
しかし、このようなダウンロードにはいくつかの問題があります.
1.存在しないファイルをダウンロードできません:例えば、プログラムが動的に(一時的に)生成された文字を、ファイルとしてダウンロードしたい場合(つまり、そのファイルは実際に存在しているのではなく、動的に生成されている)、ダウンロードできません.
2.データベースに保存されているファイルをダウンロードできません:これは似たような問題です.このファイルは実際には存在しません.データベースに保存されている場所(ペンレコードの欄)に保存されている場合、ダウンロードできません.
3.Webフォルダに存在しないファイルをダウンロードできません:ファイルは確かに存在しますが、そのフォルダは共有できるWebフォルダではありません.例えば、このファイルの位置はC:/wintで、あなたはいつもそのフォルダをWebフォルダとしたいとは思いませんか?この場合、Redirectを使用してその場所を指すことができないため、ダウンロードできません.
4.ファイルをダウンロードすると、元のページが消えます.
典型的な状況は、ユーザーにダウンロードさせることです.txtファイル、または.csv形式のExcelファイルですが...
1.このファイルはASP.を通過する可能性がある.NETプログラムは、確実にサーバ側に存在するファイルではなく、動的に生成されます.
2.またはサーバー側のエンティティの位置に存在するが、この位置を暴露したくない(この位置が公開されている場合、権限のないユーザーもURLバーにURLを入力して直接取得できる可能性が高い!!)
3.またはこの場所は、Webサイトの仮想パスが存在するフォルダにありません.(例えばC:/Windows/system 32...)
この場合、私たちは異なる方法を採用しなければなりません.
 
  
Shared Function DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FileBody As String)
  WebForm.Response.ClearHeaders()
  WebForm.Response.Clear()
  WebForm.Response.Expires = 0
  WebForm.Response.Buffer = True
  WebForm.Response.AddHeader("Accept-Language", "zh-tw")
  '
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34))
  WebForm.Response.ContentType = "Application/octet-stream"
  '
  WebForm.Response.Write(FileBody)
  WebForm.Response.End()
End Function

上のコードは、動的に生成されたテキストファイルをダウンロードします.このファイルがサーバ側のエンティティパスにすでに存在する場合は、次の関数を使用します.
 
  
Shared Sub DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FilePath As String)
  WebForm.Response.ClearHeaders()
  WebForm.Response.Clear()
  WebForm.Response.Expires = 0
  WebForm.Response.Buffer = True
  WebForm.Response.AddHeader("Accept-Language", "zh-tw")
  '
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34))
  WebForm.Response.ContentType = "Application/octet-stream"
  '
  WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath))
  WebForm.Response.End()
End Sub

上の2つのダウンロードファイルの関数は、ほとんどの開発者がASP.NETのファイルダウンロードの問題.