首先我们需要了解以下两种从数据库读取图片并保存的方法:
- 将图片转换为二进制保存到数据库中,读取时再将二进制转换为图片;
- 在服务器本地保存图片,将本地图片路径保存到数据库中,读取时根据路径从本地读取图片。
下面我们逐一介绍这两种方法。
方法一:将图片转换为二进制保存到数据库中
1.1 保存图片到数据库
首先,我们需要将读取到的图片转换成二进制,然后将二进制数据存储到数据库中。在C#中,我们可以使用MemoryStream
和BinaryWriter
对象将图片转成二进制数据并保存到数据库中。示例代码如下:
using System.IO;
using System.Data.SqlClient;
// 读取本地图片转成二进制后保存到数据库中
public static void SaveImageToDatabase(string imagePath, int id)
{
byte[] fileData = null;
// 读取图片,并将二进制数据保存到 fileData 变量中
using (FileStream fs = new FileStream(imagePath, FileMode.Open))
{
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
fileData = ms.ToArray();
}
// 将二进制数据保存到数据库中
using (SqlConnection conn = new SqlConnection("数据连接字符串"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO ImageTable (ID,ImageData) VALUES (@ID,@ImageData)", conn))
{
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@ImageData", fileData);
cmd.ExecuteNonQuery();
}
}
}
}
1.2 从数据库中读取图片
当我们需要从数据库中读取图片时,我们先读取二进制数据,然后再将二进制数据转换为图片。在C#中,我们可以使用BinaryReader
和MemoryStream
对象将二进制数据转成图片。示例代码如下:
using System.IO;
using System.Data.SqlClient;
using System.Drawing;
// 从数据库中读取二进制数据并转成图片
public static Image GetImageFromDatabase(int id)
{
byte[] fileData;
using (SqlConnection conn = new SqlConnection("数据连接字符串"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT ImageData FROM ImageTable WHERE ID=@ID", conn))
{
cmd.Parameters.AddWithValue("@ID", id);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
fileData = (byte[])reader["ImageData"];
using (MemoryStream ms = new MemoryStream(fileData))
{
return Image.FromStream(ms);
}
}
}
}
}
return null;
}
方法二:在服务器本地保存图片,将本地图片路径保存到数据库中
2.1 保存图片到本地
我们可以在服务器本地建立一个目录用于保存图片,然后将读取到的图片保存到该目录内。在C#中,我们可以使用File.Copy
方法实现。示例代码如下:
using System.IO;
// 读取本地图片并保存到本地目录中
public static string SaveImageToLocal(string imagePath, string saveDir)
{
// 生成保存文件的路径和文件名
string fileName = Path.GetFileName(imagePath);
string savePath = Path.Combine(saveDir, fileName);
// 将文件拷贝到本地目录上
File.Copy(imagePath, savePath, true);
return savePath;
}
2.2 保存本地图片路径到数据库中
当我们需要将本地图片路径保存到数据库中时,我们可以使用方法一中介绍的方法将路径转换为二进制数据保存到数据库中。示例代码如下:
using System.IO;
using System.Data.SqlClient;
// 将本地图片路径保存到数据库中
public static void SaveImagePathToDatabase(string imagePath, int id)
{
// 将路径转换成二进制数据
byte[] fileData = Encoding.UTF8.GetBytes(imagePath);
// 将二进制数据保存到数据库中
using (SqlConnection conn = new SqlConnection("数据连接字符串"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO ImageTable (ID,ImagePathData) VALUES (@ID,@ImagePathData)", conn))
{
cmd.Parameters.AddWithValue("@ID", id);
cmd.Parameters.AddWithValue("@ImagePathData", fileData);
cmd.ExecuteNonQuery();
}
}
}
2.3 从数据库中读取本地图片路径
当我们需要从数据库中读取本地图片路径时,我们可以使用方法一中介绍的方法将二进制数据转换为路径。示例代码如下:
using System.IO;
using System.Data.SqlClient;
// 从数据库中读取本地图片路径
public static string GetImagePathFromDatabase(int id)
{
byte[] fileData;
using (SqlConnection conn = new SqlConnection("数据连接字符串"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT ImagePathData FROM ImageTable WHERE ID=@ID", conn))
{
cmd.Parameters.AddWithValue("@ID", id);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
fileData = (byte[])reader["ImagePathData"];
return Encoding.UTF8.GetString(fileData);
}
}
}
}
return null;
}
这就是从数据库读取图片并保存的两种方法的完整攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#从数据库读取图片并保存的两种方法 - Python技术站