生成一个文件,然后启动一个安全的下载

在一个asp.net 2.0(VB)环境中工作,我已经有了一个代码,可以从网站的特定“用户”的数据库中生成一个excel文件。 我希望能够按需启动这个报告生成器,然后在文件生成后,允许用户下载这个文件。

我怎样才能安全地做到这一点,而不是只是在一些公开可读的目录中丢弃文件?

注:与这个问题有关 ,但我真正感兴趣的部分从来没有回答。

而不是把它放在一个公共的目录中,你可以创build一个HTTP处理程序,它允许你做授权。

您可以通过编译和注册web.config或创build一个ashx页面来创build一个处理程序。 然后您的页面将授权用户,然后将内容写入响应。

如果您需要会话状态,请确保从IRequiresSessionStateinheritance。

编辑

我是一个C#的人,所以这里是一个例子:

public class DownloadFile : IHttpHandler, System.Web.SessionState.IRequiresSessionState { public void ProcessRequest (HttpContext context) { //Validate user is authenticiated and authorized. if (context.Request.IsAuthenticated) { //This is your own custom authorization mechanism if (AuthorizeUser(context.Request.User)) { //not sure what the correct content type is. This is probally wrong context.Response.ContentType = "application/xls"; //Setting size is optional context.Response.AddHeader("Content-Disposition", "attachment; filename=" + downloadName + "; size=" + myExcellFile.Length.ToString()); context.Response.BinaryWrite(myExcellFile); } } 

使用Http处理程序(* .ashx文件)。 移动代码生成文件到处理程序, 生成文件之前检查安全性,设置适当的内容types和内容处置标题 ,并使用Response.BinaryWrite将文件直接发送到浏览器。 切勿将其放在服务器的文件系统上。

你可以吗…?

  1. 在私人(用户不可访问)文件夹中创build您的Excel文件
  2. 向用户返回与Excel电子表格关联的唯一url(不容易猜到的内容)
  3. 在您的应用程序中处理该url请求,并将excel电子表格传送给调用者(相应地更改响应的内容types)

这可以让你有这些url超时,甚至在需要的时候重新生成Excel电子表格。