我正在SQL Server列中保存图像文件(数据类型varbinary(max)
)。将文件保存在数据库中的代码:
Stream fs = imgUpload.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ToString());
conn.Open();
using (SqlCommand cmd = new SqlCommand("update tbEHUsers set photo=@binaryValue where UserID="+Session["UserID"].ToString(), conn))
{
cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, -1).Value = bytes;
cmd.ExecuteNonQuery();
}
conn.Close();
从SQL Server获取图像数据:
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ToString());
con.Open();
SqlCommand CMD = new SqlCommand("SELECT Photo from tbEHUsers where UserID=" + Session["UserID"], con);
SqlDataReader rdr = CMD.ExecuteReader();
byte[] imgArray = null;
while (rdr.Read())
{
imgArray = (byte[])rdr["Photo"];
}
File.WriteAllBytes("D:\\Test12345.jpg", imgArray);
我上传的文件的原始大小为858KB但是从数据库检索并使用File.WriteAllBytes
方法再次保存后,它增加到859KB。现在,当我尝试打开此文件时,我发现文件错误已损坏'。保存和检索时,字节数组大小相同。
我在这里做错了什么?
答案 0 :(得分:0)
使用FileUpload.PostedFile时,需要重置InputStream以从头开始。因此,在代码之上添加以下行:
imgUpload.PostedFile.InputStream.Seek(0, SeekOrigin.Begin);