【问题标题】:download file using file path stored in database in ASP.Net使用存储在 ASP.Net 数据库中的文件路径下载文件
【发布时间】:2014-02-27 22:20:25
【问题描述】:

我正在使用 VS2012 ASP.NET 网站,并且我有一个 asp.net 页面,我可以在其中将文件上传到文件夹。

当我上传文件时,它将路径存储在 SQL 数据库表字段中,如~/Client_Info/text.docx,并且文件本身保存在一个文件夹中。

现在我想下载我存储的文件,方法是在带有下载链接的网格视图中显示它。但经过一整天的搜索,我无法得到答案。有人可以帮帮我吗?

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();     
            } 
        }
    }  
}

【问题讨论】:

  • 您的代码只是在写出……存储在 [FileData] 列中的任何内容。但是,您说文件本身存储在文件系统中,而数据库表只保存文件信息?您需要先从磁盘读取文件,然后将其写入响应。

标签: asp.net


【解决方案1】:

为了将文件写入响应,您可以使用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();  

【讨论】:

  • 感谢您的回复,我有一个问题,对象“dr”被标记为 int。它给了我一个错误“无法从'object'转换为'string'”我该如何解决?
  • dr 对象是一个SqlDataReader。也许是 dr["..."] 无法转换。我已经对我的代码进行了一些编辑,这可能是正确的。
猜你喜欢
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2016-06-23
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多