当前位置:首页 > 行业动态 > 正文

ASP.NET二进制流上传图片至数据库保存方式详解?

csharp,using (var ms = new MemoryStream()) {, fileUpload.SaveAs(ms);, byte[] imageBytes = ms.ToArray();, using (var connection = new SqlConnection(connectionString)) {, string query = "INSERT INTO Images (ImageData) VALUES (@ImageData)";, using (var command = new SqlCommand(query, connection)) {, command.Parameters.AddWithValue("@ImageData", imageBytes);, connection.Open();, command.ExecuteNonQuery();, }, },},

在ASP.NET中,使用二进制流的方式将上传的图片保存到数据库是一种常见的需求,尤其在需要确保图片数据完整性和安全性的场景下,以下是详细的实现步骤:

1、创建数据库表:需要在数据库中创建一个用于存储图片的表,该表至少包含两个字段:一个自增的主键Image_ID和一个用于存储图片二进制数据的字段Image_Content(数据类型通常为imagevarbinary(MAX))。

2、前端页面设计:在ASP.NET的前端页面中,添加一个FileUpload控件用于选择要上传的图片,以及一个按钮用于触发上传操作,用户可以通过FileUpload控件选择本地的图片文件,然后点击上传按钮将图片上传到服务器并保存到数据库中。

3、后端代码实现

获取上传的文件:在按钮的点击事件处理程序中,通过FileUpload控件的PostedFile属性获取用户选择的文件,可以使用FileUpload1.PostedFile来获取上传的文件对象。

读取文件内容:使用FileStream类打开选中的文件,并将其内容读取到一个字节数组中,这可以通过创建一个FileStream对象,并使用其Read方法将文件内容读入字节数组来实现。

     FileStream fs = FileUpload1.PostedFile.InputStream;
     byte[] content = new byte[fs.Length];
     fs.Read(content, 0, content.Length);
     fs.Close();

连接数据库:使用ADO.NET或Entity Framework等技术连接到数据库,这里以ADO.NET为例,需要创建SqlConnection对象,并设置连接字符串以指定数据库服务器、数据库名称、用户名和密码等信息。

     SqlConnection conn = new SqlConnection("Data Source=服务器地址;Initial Catalog=数据库名称;Persist Security Info=True;User ID=用户名;Password=密码");

执行插入操作:创建SqlCommand对象,并设置其CommandText属性为插入图片数据的SQL语句,将字节数组作为参数传递给SQL语句中的Image_Content字段。

     SqlCommand cmd = conn.CreateCommand();
     cmd.CommandText = "INSERT INTO Images (Image_Content) VALUES (@content)";
     cmd.Parameters.AddWithValue("@content", content);

提交事务:打开数据库连接,执行SqlCommand对象的ExecuteNonQuery方法以执行插入操作,并在完成后关闭数据库连接。

     conn.Open();
     cmd.ExecuteNonQuery();
     conn.Close();

4、显示图片:要从数据库中读取并显示图片,可以在另一个页面或控件中实现,根据图片的唯一标识符(如Image_ID)从数据库中检索出对应的图片二进制数据,将二进制数据转换为byte[]数组,并通过HTTP响应输出流将其发送给客户端浏览器进行显示,这通常需要在页面的代码隐藏文件中实现相应的逻辑,例如在Page_Load事件处理程序中完成数据的读取和响应的设置。

就是使用ASP.NET和二进制流方式将上传的图片保存到数据库并读取显示的详细过程,这种方法虽然相对复杂一些,但能够确保图片数据的完整性和安全性,适用于对图片存储和访问有较高要求的场景。

0