创建文件的下载链接时出错

时间:2014-12-29 01:06:31

标签: c# visual-studio-2013 download

我正在创建一个显示特定文件夹中文件列表的功能,并允许用户下载,但我遇到错误,指出:

  

“System.Web.dll中出现'System.ArgumentNullException'类型的异常,但未在用户代码中处理,{”值不能为空。\ r \ nParameter name:filename“}”

声明中:

context.Response.WriteFile(context.Request.QueryString["files"]);

我的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            string[] files = Directory.GetFiles(@"C:\temp");
            rpt.DataSource = files;
            rpt.DataBind();
        }
    }
        protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
                {
                string file = e.Item.DataItem as string;
                HyperLink hyp = e.Item.FindControl("hyp") as HyperLink;
                hyp.Text = file;
                hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}\n" , file);
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.Buffer = true;
            context.Response.ContentType = "application/octet-stream";
            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Request.QueryString["files"]);
            context.Response.WriteFile(context.Request.QueryString["files"]);
            context.Response.End();
        }
}

2 个答案:

答案 0 :(得分:1)

尝试使用Request.QueryString(files)

答案 1 :(得分:0)

可能是拼写错误,但您在ItemDataBound中的代码是

 hyp.NavigateUrl = string.Format("~/Handlers/FileHandler.ashx?file={0}\n" , file);

您在此处设置查询字符串参数'文件'

在您的处理程序中,您正在访问'文件的ProcessRequest方法。参数

 context.Response.WriteFile(context.Request.QueryString["files"]);

尝试将此更改为

 context.Response.WriteFile(context.Request.Params["file"]);