将图像保存到数据库
本文关键字:数据库 保存 图像 | 更新日期: 2023-09-27 18:36:29
我有一些简单的实体,现在需要有一个个人资料图像。 正确的方法是什么?因此,它是 1 对 1 的关系,一个图像仅与一个实体相关,反之亦然。此图像应通过网络表单上传,并插入相关实体。
如果有人能指出正确的方向,如何将图像保存到数据库和相关实体会很棒。
只是一个附带评论:我认为将图像存储在数据库中不是一个好主意。
一般来说,将图像存储在数据库中不是一个好主意,因为数据库旨在存储文本而不是大的二进制块。最好存储图像的路径并将图像放在文件夹中。如果要确保具有实体 ID 的 1 对 1 关系名称图像 (1323.jpg)。
如果你想要有图像路径,你应该遵循一些准则(在一般代码中是防御性的):
- 上传图像时检查图像
- 是否有效(甚至对图像标题进行了二进制检查)
- 不允许在新实体插入的情况下覆盖现有图像。
- 将图像命名为主键 (1.jpg、2.jpg)
- 在加载图像时,不要假设图像会在那里。
- 不允许(如果可能)与图像进行手动交互(在计算机中不进行远程处理并将图像从一个位置复制到另一个位置)。手动交互可能会导致不一致。
但我认为出于某种原因你应该这样做。所以为了达到你想要的:
数据库设计
- 在表中创建二进制列(二进制或变量)
- 最好在具有 1-1 关系的不同表中创建它。然而,这个想法是避免在水化实体时加载图像。使用延迟加载方法仅在需要时加载图像。
- 当您进行大选择时,您必须避免加载图像(例如,如果您想在组合中加载所有实体,请避免从任何情况下选择 *),因为它将免费加载数千张图像。正如我所说,这可以通过将图像放在不同的表中,或者在 SELECT 中仅加载适当的列或通过延迟加载来完成。(或者更好的是数据库中没有图像,只有路径)
C# 代码
- 使用BynaryReader阅读它
用于存储它的用户字节数组
查看此链接以获取代码示例:http://www.codeproject.com/Articles/21208/Store-or-Save-images-in-SQL-Server
代码是微不足道的,但为什么是DB?如果这是一个网站,为什么不将其保存到磁盘上可以轻松引用的位置?
数据库经过优化,可存储已知大小和相对较小的数据。 您的图像长度很可能超过 8KB(因为它是 MAX 数据类型)。图像将存储在与您的"个人资料"不同的行/页面上。
就个人而言,我会将图像保存在已知文件夹中,并使用id作为图像名称。 对于没有图像并使用标准 gif 或类似内容的配置文件,可以通过将配置文件 ID 的 simlinks/硬链接设置为常见 gif 来保持简单/修剪。
public class Profile
{
public int Id {get;}
public string Name {get; private set;}
public Image Picture {get; private set;}
public void Save()
{
using (var connection = new SqlConnection("myconnectionstring"))
using (var command = new SqlCommand("", connection))
{
command.CommandText =
"UPDATE dbo.TblProfile " +
"SET " +
"Name = @name, " +
"Picture = @picture " +
"WHERE ID = @id";
command.Parameters.AddWithValue("@name", Name);
command.Parameters.AddWithValue("@picture", Picture);
command.Parameters.AddWithValue("@id", Id);
command.ExecuteNonQuery();
}
}
}
我认为以下链接将为您提供解决方案,
上传图片并保存在数据库中