我有一组pdf文件存储在只能由应用程序访问的位置 - 因此无法通过http直接访问这些文件。
文件路径由数据库存储,当用户获得下载文件的选项时,正在执行以下代码:
Response.ContentType = "Application/pdf"
Response.AppendHeader("Content-Disposition", "attachment; filename=<some file name>")
Response.TransmitFile(Server.MapPath("<the file path>"))
Response.End()
只要我处理单个文件
,一切正常问题:
我有一个存储过程,它返回用户可供下载的所有文件的列表,并且可以返回1到20之间的任意数量的文件。
我想创建一个页面,列出所有这些文件以及下载 每个文件旁边的选项。
像
这样的东西File name 1, some description 1, download (button, link?)
File name 2, some description 2, download (button, link?)
它不能只是一个url链接,因为正如我所提到的,文件不能直接访问,并且每次下载都需要执行一些代码
使用.net2.0实现这一目标的优雅解决方案是什么?
答案 0 :(得分:8)
使用常规ASP.NET(2.0),您可能希望创建一个“处理程序”。最简单的选择是添加“通用处理程序”(ashx)模板 - 然后在页面上放置常规链接(例如)“download.ashx?id = 2”。
在处理程序内部,解析查询字符串,并将文件流式传输给用户:
public void ProcessRequest(HttpContext context)
{
// set headers...
string filePath = FindPath(context.Request.QueryString("id"));
context.Response.WriteFile(filePath);
}
其中FindPath
从查询字符串链接解析物理文件。
如果这是ASP.NET MVC,您可以使用File(path)
action-result。
答案 1 :(得分:0)
您返回给用户的文件列表中的URL可以指向可以下载它们的ASPX页面,就像您提供的示例代码一样。