我正在使用VS2012 ASP.NET网站,我有一个asp.net页面,我将文件上传到文件夹。
当我上传文件时,它将路径存储在SQL数据库tabel字段中,如~/Client_Info/text.docx
,文件本身保存在文件夹中。
现在我想通过下载链接在gridview中显示我已经存储的文件。但经过一整天的搜索,我无法得到答案。有人可以帮助我吗?
protected void lnkDownload_Click(object sender, EventArgs e)
{
LinkButton lnkbtn = sender asLinkButton;
GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow;
int fileid = Convert.ToInt32(gvDetails.DataKeys[gvrow.RowIndex].Value.ToString());
string name, type;
using (SqlConnection con=new SqlConnection(strCon))
{
using (SqlCommand cmd=new SqlCommand())
{
cmd.CommandText = "select FileName, FileType, FileData from FileInformation where Id=@Id";
cmd.Parameters.AddWithValue("@id", fileid);
cmd.Connection = con;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.Read())
{
Response.ContentType = dr["FileType"].ToString();
Response.AddHeader("Content-Disposition",
"attachment;filename=\""
+ dr["FileName"] + "\"");
Response.BinaryWrite((byte[])dr["FileData"]);
Response.End();
}
}
}
}
答案 0 :(得分:0)
为了将文件写入Response,您可以使用Response.WriteFile
功能。它将文件的物理路径作为参数。
您可以尝试以下代码,假设文件路径正确且文件存在。
Response.ContentType = dr["FileType"].ToString();
Response.AddHeader("Content-Disposition",
"attachment;filename=\""
+ dr["FileName"].ToString() + "\"");
Response.WriteFile(Server.MapPath(dr["FileName"].ToString()));
Response.End();