检索BLOB文件

时间:2011-10-28 14:52:42

标签: c# .net sql ado.net blob

我在SQL数据库中上传BLOB文件。我创建动态超链接重定向到我的downloads.aspx.cs,下载文件。

当我点击它时,我唯一检索的就是:

*����JFIF,,��ExifMM*�   ���(1�2;%+>P?`���7��i��%��NIKON CORPORATIONNIKON D3-��'-��'Adobe Photoshop CS4 Macintosh2010:11:19 21:53:25 9�I�@d!ddGddd+�K�r� (��Ƃ�Έ"�'@�0221�֐����� ���� � ��,��42��42��42�0100����Р�d����J����R�b����   � ��Z @( 2010:11:19 20:44:392010:11:19 20:44:39 � ASCII  R030100��(�HH����JFIFHH��Adobe_CM��Adobed����* 

这是我在这个download.aspx中的Page_Load代码:

protected void Page_Load(object sender, EventArgs e)
{
    string filename = Request["file"].ToString();
    var conString = ConfigurationManager.ConnectionStrings["LocalSqlServer"];
    string strConnString = conString.ConnectionString;
    SqlConnection dbConnection = new SqlConnection(strConnString);
    dynamic queryString = ("SELECT Data FROM Files WHERE Name = '" + filename + "'");
    SqlCommand theCommand = new SqlCommand(queryString, dbConnection);
    dbConnection.Open();
    SqlDataReader reader = theCommand.ExecuteReader();

    if (reader.Read() && reader != null)
    {
        Byte[] bytes;
        bytes = Encoding.UTF8.GetBytes(String.Empty);
        bytes = (Byte[])reader["Data"];
        Response.BinaryWrite(bytes);

        reader.Close();
    }

    dbConnection.Close();
}

有人可以告诉我为什么吗?谢谢。

2 个答案:

答案 0 :(得分:5)

您需要设置内容类型,并将内容处置添加到响应标头中,如下所示:

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
 Response.AddHeader("content-disposition", "attachment;  filename=whatever.xlsx");
 Response.BinaryWrite(yourbytes);

注意:content-type必须特定于您要传输的文件类型。如果是图像,则必须是“image / jpg”;等同样的标题;如果是图像,可能要将文件名部分的扩展名设置为“file.jpg”。 上面的代码只是一个例子

答案 1 :(得分:3)

您需要向浏览器发送Content-Type,Content-Length和Content-Disposition标头,以便它能够理解二进制数据。