检索BLOB文件
本文关键字:文件 BLOB 检索 | 更新日期: 2023-09-27 18:12:36
我在SQL数据库中上传BLOB文件。我创建了动态超链接重定向到我的download .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����*
这是我的Page_Load代码在这个下载。Aspx:
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();
}
谁能告诉我为什么?谢谢你。
您需要设置内容类型,并在响应头中添加内容配置,如下所示:
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=whatever.xlsx");
Response.BinaryWrite(yourbytes);
注意: content-type必须特定于您正在流式传输的文件类型。如果是图片,就必须是"image/jpg"这样的格式;等。类似地,对于header;如果它是一个图像,可能你想把文件名部分的扩展名设置为"file.jpg"。上面的代码只是一个例子
您需要向浏览器发送Content-Type, Content-Length和Content-Disposition报头,以便它能够理解二进制数据