2008-09-01 17 views
23

asp.net 2.0を使用してダウンロードアクションをWebページから実装する最良の方法は何ですか?asp.netでのファイルダウンロードの実装方法

アクションのログファイルは、[Application Root]/Logsというディレクトリに作成されます。私は完全なパスを持っており、クリックすると、IISサーバーからユーザーのローカルPCにログファイルをダウンロードするボタンを提供したいと考えています。

+0

小さなファイルにもResponse.TransmitFileを使用しますか? –

答えて

33

このヘルプん:

http://www.west-wind.com/weblog/posts/76293.aspx

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt"); 
Response.TransmitFile(Server.MapPath("~/logfile.txt")); 
Response.End(); 

Response.TransmitFileではなくResponse.WriteFileの、大きなファイルを送信する受け入れられた方法です。

+7

これの重要な部分はResponse.End()です。ダウンロードしなくてもダウンロードが破損したり、デジタル署名が壊れたり、奇妙なことが起こることはありません –

+0

PNGファイルでは動作しません。どうすればいいですか? –

+0

別のURLからリモートファイルを取得するために使用できますか? – AlexVPerl

10

http://forums.asp.net/p/1481083/3457332.aspx

string filename = @"Specify the file path in the server over here...."; 
FileInfo fileInfo = new FileInfo(filename); 

if (fileInfo.Exists) 
{ 
    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name); 
    Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
    Response.ContentType = "application/octet-stream"; 
    Response.Flush(); 
    Response.TransmitFile(fileInfo.FullName); 
    Response.End(); 
} 


更新:

初期コード

Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name); 

"インライン;アタッチメント" を有するコンテンツ配置のために、すなわち二つの値。

正確に起動したときはわかりませんが、Firefoxではのみというファイル名が表示されませんでした。ファイルダウンロードボックスに、Webページの名前とその拡張子(pagename.aspx)が表示されます。ダウンロード後、名前を実際の名前に戻します。ファイルが正常に開きます。

this pageごとに、先着順で動作します。値をattachmentに変更するだけで問題が解決されました。

PS:これがベストプラクティスかどうかはわかりませんが、問題は解決しています。

+2

-1:マーティン氏によると、WriteFileの代わりにTransmitFileを使用します。大きなファイルのために壊れた – Niki

+0

+1の修正のための答え! – bnieland

+0

私はModalPopupExtenderの中にあるボタンでこれをやっていますが、更新パネルを操作しても機能しません。しかし、modalpopup/updatepanelエリア外にボタンを移動するとそれは完璧に動作するのですか?これを回避する方法は? – JoeManiaci

関連する問題