サーバーにポスト バックし、次のメソッドを呼び出す LinkButton を単純に使用できますか?
internal static void ContentToBrowser(string contentType, string filename, string content)
// Send to browser
var response = HttpContext.Current.Response;
response.Clear();
response.ContentType = contentType;
response.AddHeader("Content-Disposition",
String.Format("attachment; filename=\"{0}\"", filename));
var contentLength = response.ContentEncoding.GetByteCount(content);
response.AddHeader("Content-Length", contentLength.ToString());
response.Write(content);
response.End();
}
これにより、サーバーに保存することを心配することなく、必要なコンテンツをクライアントに直接書き戻すことができます。例えば
protected void LinkButtonClick(object sender, EventArgs e)
{
string filename = @"c:\filepath\blah.xlsx";
string content = File.ReadAllText(filename);
ContentToBrowser("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "downloaded-blah.xlsx", content);
File.Delete(filename);
}
ただし、後でファイルを削除する動機については疑問を呈する必要があります. クライアントによって正常にダウンロードされ、保存されたことをどのように確認できますか?