有一个aspx页面,向用户显示文件以供下载。 这些文件可以是任何扩展名,并且位于wwwroot文件夹之外。 它们以树视图显示。 我希望用户能够下载他们点击的任何文件。
我尝试了以下内容,但它只给了我一个aspx页面。
parent.Text是文件所在的文件夹。 node.Text是文件名。 所以这将包含类似c:\ dir \ text.txt
的内容Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", Path.Combine(parent.Text, node.Text)));
答案 0 :(得分:2)
文件名标头值表示要呈现给用户浏览器的名称(不是文件的实际路径)。
为了让用户接收文件,您必须将其输出到响应中。 TransmitFile方法对此有很大帮助。
Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", node.Text));
Response.TransmitFile(Path.Combine(parent.Text, node.Text));
Response.End();
答案 1 :(得分:0)
好的,根据我说的话。
在树视图节点上添加一个链接,以便在单击时它请求一个名为" fileHandler"的处理程序。与查询字符串中涉及的文件的ID。
例如,当滚动节点时,你会有类似" [你的网站名称] /filehandler.ashx?fileid =" guid | id"
然后按照以下方式实现处理程序:
http://aspnetupload.com/Quickstart/Download-From-File.aspx
使用处理程序时的一些优点包括不会产生下载页面生命周期的成本(即在跳出和更改标题之前页面上没有浪费的回发),并且文件服务功能就在它自己的位置。