在ASP.NET中提供静态文件

本文关键字:静态 文件 ASP NET | 更新日期: 2023-09-27 18:18:58

我只是想在我的解决方案中的文件夹中放置一个pdf文件,并让用户在我的网站上下载它。很简单!

我有一个主要的。aspx页面,其中包含一个静态链接到另一个。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();

仅供参考…这是我在工具的不同区域使用的另一个下载页面。这个页面实际上接受一个参数并访问数据库以获取存储在数据库中的文件。这段代码确实可以工作,但我不想为我的"工作流"下载页面这样做。

        ...
        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();

在ASP.NET中提供静态文件

我能够找到这个答案,解释你不应该使用Response.End(),而是建议使用CompleteRequest()方法。

HttpContext抛出HttpException

http://blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how-customer-feedback-helps-us-improve-msdn-documentation.aspx

通过调用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();

    }