在asp.net 2.0(VB)环境中工作,我已经有了可以从数据库为网站的特定“用户”生成excel文件的代码。我希望能够按需启动此报告生成器,然后在生成文件后,允许用户下载此文件。
如何安全地执行此操作,而不仅仅是将文件转储到某个可公开读取的目录中?
注意:与this question相关,但我真正感兴趣的部分从未得到过回答。
答案 0 :(得分:4)
您可以创建一个允许您进行授权的HTTP处理程序,而不是将其放在公共目录中。
您可以通过在web.config中编译和注册或通过创建ashx页面来创建处理程序。然后您的页面将授权用户,然后将内容写入响应。
如果您需要会话状态,请务必从IRequiresSessionState继承。
我是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);
}
}
答案 1 :(得分:3)
使用Http处理程序(* .ashx文件)。移动代码以生成处理程序的文件,在生成文件之前检查的安全性,设置appropriate content-type and content-disposition headers,并使用Response.BinaryWrite
将文件直接发送到浏览器。切勿将其放在服务器的文件系统上。
答案 2 :(得分:0)
你能......?
这样可以让这些网址超时,甚至可以在需要时动态重新生成Excel电子表格。