ASP.NETで、ファイルをクライアントにストリーミングし、[名前を付けて保存]ダイアログでユーザーに場所の選択を求める場合は、正しいContent-TypeおよびContent-Disposition応答ヘッダーを設定してから、ファイルをに直接書き込む必要があります。応答ストリーム:
例えば:
protected void SomeButton_Click(object sender, EventArgs e)
{
// TODO: adjust the path to the file on the server that you want to download
var fileToDownload = Server.MapPath("~/App_Data/someFile.pdf");
Response.ContentType = "application/octet-stream";
var cd = new ContentDisposition();
cd.Inline = false;
cd.FileName = Path.GetFileName(fileToDownload);
Response.AppendHeader("Content-Disposition", cd.ToString());
byte[] fileData = System.IO.File.ReadAllBytes(fileToDownload);
Response.OutputStream.Write(fileData, 0, fileData.Length);
}
このコードが実行されると、ファイルはクライアントブラウザーに送信され、コンピューターの特定の場所に保存するように求められます。
残念ながら、セキュリティ上の理由から、クライアントが自分のコンピュータにファイルを保存することを選択したディレクトリをキャプチャする方法はありません。この情報はネットワークを介して転送されることはなく、ASP.NETアプリケーション内でそれを知る方法はありません。したがって、この情報を取得する他の方法を見つける必要があります。たとえば、クライアントにテキストボックスや他のフィールドに入力するように依頼するなどです。