无法在asp.net中下载文件

时间:2018-01-15 06:15:43

标签: c# asp.net

我上传了我的文件并将其数据插入到数据库中,现在当我点击我想下载它时。

bytes = (byte[])dsResult.Tables[0].Rows[0]["data"];
contentType.Text = dsResult.Tables[0].Rows[0]["contentType"].ToString();
fileName.Text = dsResult.Tables[0].Rows[0]["name"].ToString();

try
{ 
   Response.Clear();
   Response.Buffer = true;
   Response.Charset = "";
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.ContentType = contentType.Text;
   Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName.Text);
   Response.BinaryWrite(bytes);                
   Response.Flush();             
}
catch (Exception ex)
{
   throw;
}

它没有丢失任何错误,但它没有下载文件。

2 个答案:

答案 0 :(得分:0)

只有在Page_Load处相应地设置HTML标头时,才会开始下载文件。含义:您无法向用户呈现任何HTML DOM元素,因为这将是' html / text whereas you require pdf / document or excel / document`等作为内容 - 类型。

因此,为了简化操作,请将文件传输代码放在新页面中,Page_Load事件处理文件下载代码。然后,从用户最初所在的页面,让用户点击链接按钮或redirect他/她到下载页面的内容。

令人惊奇的是,文件传输将在用户实际不必访问其他页面的情况下进行。该文件将被下载,即使您redirect已下载到下载页面,该用户仍将位于源页面

答案 1 :(得分:0)

从DB下载文件?

您必须将文件从DB保存到Project Directory Folder

您可以将其放在button event

 string s = "\\Image\\file1.jpg";
 Response.Clear();
 Response.ClearHeaders();
 Response.ClearContent();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=" + s);
 Response.TransmitFile(Server.MapPath("~" + s));
 Response.End();
 Response.Redirect("RedirectMe.aspx", false);