gpt4 book ai didi

c# - 从 IP 摄像机流式传输图像后如何将图像保存到数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:49 24 4
gpt4 key购买 nike

我有一个代码可以从网络摄像机流式传输快照并将其保存在硬盘上。 然后我有另一个代码来读取它并将其存储在 ms-sql 数据库中。我知道如果我只是流式传输图像并将其保存在数据库中而不将其保存在硬盘上并再次读取它会更快。但我不知道如何合并它。

获取图片的代码

        string sourceURL = "http://" + ip + "/cgi-bin/cmd/encoder?SNAPSHOT";
WebRequest req = (WebRequest)WebRequest.Create(sourceURL);
req.Credentials = new NetworkCredential("admin", "123456");
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
Bitmap bmp = (Bitmap)Bitmap.FromStream(stream);
bmp.Save(ImagePath);

然后将图片插入数据库:

byte[] imageData = ReadFile(ImageName);
using (SqlConnection cn = new SqlConnection(constr))
{
string qry = "update vaiolations set val_image=@ImageData ,valid=1 where id=@OriginalPath ";
SqlCommand SqlCom = new SqlCommand(qry, cn);
SqlCom.Parameters.Add(new SqlParameter("@OriginalPath", (object)id));
SqlCom.Parameters.Add(new SqlParameter("@ImageData", (object)imageData));
cn.Open();
SqlCom.ExecuteNonQuery();
cn.Close();
cn.Dispose();
}
byte[] ReadFile(string sPath)
{
using (FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read))
{
byte[] data = null;
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
BinaryReader br = new BinaryReader(fStream);
data = br.ReadBytes((int)numBytes);
return data;
}
}

如何组合这两个代码片段来流式传输图像,然后立即将其插入数据库?

最佳答案

为什么要将传入的字节转换为位图?

您可能只将流读取到内存流,然后将其传递到数据库:

Stream stream = resp.GetResponseStream();
byte[] data;
using (MemoryStream ms = new MemoryStream())
{
int num_bytes = 0;
byte[] temp = new byte[4096];
while ((num_bytes = stream.Read(temp, 0, temp.Length)) > 0)
ms.Write(temp, 0, bytes);
data = ms.ToArray();
}

然后将数据传递到您的数据库。

关于c# - 从 IP 摄像机流式传输图像后如何将图像保存到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com