图像保存到数据库(Saving image to the database)

2019-09-17 21:57发布

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

如果任何人都可以点我朝着正确的方向如何坚持图像数据库和相关的实体将是巨大的。

Answer 1:

就在方评论: 我觉得是不是存储在数据库的图像是一个好主意

一般不在分贝是个好主意存储图像作为DBS的设计存储文本没有大的二进制块。 要好得多,以存储图像路径和有一个文件夹中的图片。 如果你想确保1对1的关系名称图像与实体(1323.jpg)的ID。

如果你想有图像路径应遵循的一些准则(一般代码防守):

  • 在图像的上传检查图像是有效的(甚至使图像头的二进制校验)
  • 不要让一个新的实体的INSERT的情况下覆盖现有的图像。
  • 命名图像作为主键(1.JPG,2.JPG)
  • 在图像的负载不要以为图像将是那里。
  • 不要让(如果可能)与图像人工交互(在机将影像复制到其他没有远程从一个地方)。 人工干预可能会导致不一致。

但我相信,由于某种原因,你应该这样做。 因此,为了实现你想要的:

DB设计

  • 在表中创建一个二进制列(binary或varbinary)
  • 如果您在不同的表1-1关系创建它是更好的。 但是这个想法是避免保湿实体时加载图像。 使用延迟加载方式来加载你的形象,只有当你想要的。
  • 你必须避免当你做出一个大的选择(例如,如果要加载在组合所有实体避免SELECT * FROM等等),因为它会加载数千张图片白白载入图像。 正如我说,这可以通过在不同的表图像,或选择loading唯一正确的列或者通过延迟加载完成。 (或甚至没有在DB的图像更好,只是路径)

C#代码

  • 使用BynaryReader读它
  • 用户字节数组来存储它

  • 检查此链接代码示例: http://www.codeproject.com/Articles/21208/Store-or-Save-images-in-SQL-Server



Answer 2:

该代码是微不足道的,但为什么DB? 如果这是一个网站,为什么不把它保存到磁盘上的位置,在那里你可以轻松地引用呢?

数据库被优化以存储和已知的大小的数据相对小的尺寸。 您选择的图像将最有可能是在长度上比8KB更多(mearning其一个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();
        }
    }
}


Answer 3:

我想下面的链接会给你的解决方案,

上传图像并保存在数据库



文章来源: Saving image to the database