将图像保存到数据库

pan*_*njo 2 c# sql-server image asp.net-mvc-3

我有一些简单的实体,现在需要有一个配置文件图像.这样做的正确方法是什么?因此,它是1对1关系,一个图像仅与一个实体相关,反之亦然.此图像应通过webform与插入相关实体一起上传.

如果有人能指出我正确的方向如何将图像持久保存到数据库和相关实体将是伟大的.

Osc*_*ley 5

只是一个侧面评论:我认为在db中存储图像不是一个好主意.

一般来说,在db中存储图像并不是一个好主意,因为dbs旨在存储不是大二进制块的文本.存储图像的路径和在文件夹中包含图像要好得多.如果你想确定具有实体ID的1对1关系名称图像(1323.jpg).

如果你想拥有图像路径,你应该遵循一些指导原则(一般代码是防御性的):

  • 上传图像时检查图像是否有效(甚至对图像标题进行二元检查)
  • 在INSERT新实体的情况下,不允许覆盖现有图像.
  • 将图像命名为主键(1.jpg,2.jpg)
  • 在加载图像时,不要假设图像会在那里.
  • 不允许(如果可能)手动与图像交互(在机器中没有远程处理并且将图像从一个地方复制到另一个地方).手动交互可能导致不一致.

但我认为出于某种原因你应该这样做.所以为了达到你想要的目的:

数据库设计

  • 在表中创建二进制列(二进制或varbinary)
  • 如果您在具有1-1关系的不同表中创建它会更好.然而,这个想法是避免在保湿实体时加载图像.使用延迟加载方法仅在您需要时加载图像.
  • 你做一个大选择时必须避免加载图像(例如,如果你想在组合中加载所有实体,避免SELECT*来自任何东西),因为它将无需加载数千个图像.正如我所说,这可以通过在不同的表中使用图像,或者在SELECT中加载适当的列或通过延迟加载来完成.(或者更好的方法是不在DB中使用图像,只有路径)

C#代码