在 ASP.NET 中提供静态文件
Serve static file in ASP.NET
我只想将一个 pdf 文件放到我的解决方案的文件夹中,让用户在我的网站上下载它。很简单!
我有一个主 .aspx 页面,其中包含一个静态 link 到另一个 .aspx 页面,我正在使用它来下载文件。如果我 运行 直接从 visual studio 下载页面,则代码有效,但是如果我 运行 我的主页并单击我指向此页面的那个,它就不起作用。这是下载页面的代码:
FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/pdf";;
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
Response.Flush();
Response.End();
仅供参考..这是我在工具的不同区域使用的另一个下载页面。这个页面其实是带一个参数,打数据库去抓取一个数据库中存储的文件。此代码确实有效,但我不想在我的 "workflow" 下载页面上这样做。
...
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = AgreementDocumentTable.Rows[0]["ContentType"].ToString();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + AgreementDocumentTable.Rows[0]["Title"].ToString());
Response.BinaryWrite((byte[])AgreementDocumentTable.Rows[0]["AgreementDocument"]);
Response.Flush();
Response.End();
我找到了这个解释你不应该使用 Response.End() 的答案,它建议使用 CompleteRequest() 方法。
通过调用 javascript 函数并使用 ScriptManager.RegisterClientScriptBlock
实现了此功能
这项工作(不知道 100% 为什么,想要一个解释)所以我要用它...
标记:
<a runat="server" id="WorkflowDownloadLink" onserverclick="DownloadWorkflowLink_Click" href="">
事件代码:
protected void DownloadWorkflowLink_Click(Object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Download", "GotoDownloadPage('./Workflow.aspx');", true);
}
代码隐藏在 Workflow.aspx:
protected void Page_Load(object sender, EventArgs e)
{
FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
Response.Flush();
}
我只想将一个 pdf 文件放到我的解决方案的文件夹中,让用户在我的网站上下载它。很简单!
我有一个主 .aspx 页面,其中包含一个静态 link 到另一个 .aspx 页面,我正在使用它来下载文件。如果我 运行 直接从 visual studio 下载页面,则代码有效,但是如果我 运行 我的主页并单击我指向此页面的那个,它就不起作用。这是下载页面的代码:
FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/pdf";;
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
Response.Flush();
Response.End();
仅供参考..这是我在工具的不同区域使用的另一个下载页面。这个页面其实是带一个参数,打数据库去抓取一个数据库中存储的文件。此代码确实有效,但我不想在我的 "workflow" 下载页面上这样做。
...
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = AgreementDocumentTable.Rows[0]["ContentType"].ToString();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + AgreementDocumentTable.Rows[0]["Title"].ToString());
Response.BinaryWrite((byte[])AgreementDocumentTable.Rows[0]["AgreementDocument"]);
Response.Flush();
Response.End();
我找到了这个解释你不应该使用 Response.End() 的答案,它建议使用 CompleteRequest() 方法。
通过调用 javascript 函数并使用 ScriptManager.RegisterClientScriptBlock
实现了此功能这项工作(不知道 100% 为什么,想要一个解释)所以我要用它...
标记:
<a runat="server" id="WorkflowDownloadLink" onserverclick="DownloadWorkflowLink_Click" href="">
事件代码:
protected void DownloadWorkflowLink_Click(Object sender, EventArgs e)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Download", "GotoDownloadPage('./Workflow.aspx');", true);
}
代码隐藏在 Workflow.aspx:
protected void Page_Load(object sender, EventArgs e)
{
FileInfo file = new FileInfo(Server.MapPath("~/Workflow/Workflow v3.pdf"));
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.BinaryWrite((byte[])File.ReadAllBytes(Server.MapPath("~/Workflow/Workflow v3.pdf")));
Response.Flush();
}