簡體   English   中英

將圖像保存到數據庫

[英]Saving image to the database

我有一些簡單的實體,現在需要具有個人資料圖片。 正確的方法是什么? 因此,它是一對一的關系,一個圖像僅與一個實體相關,反之亦然。 該圖像應通過網絡表單以及插入相關實體一起上傳。

如果有人能指出正確的方向,那么如何將圖像持久保存到數據庫和相關實體將是很棒的。

只是一個側面的評論: 我認為將圖像存儲在db中不是一個好主意

通常,將圖像存儲在db中不是一個好主意,因為dbs旨在存儲文本而不是大的二進制塊。 更好地存儲圖像路徑並在文件夾中包含圖像。 如果要確定ID為實體ID(1323.jpg)的一對一關系名稱圖像。

如果要使用圖像路徑,則應遵循一些准則(一般來說,防御性地使用代碼):

  • 上傳圖片時,檢查圖片是否有效(甚至對圖片標題進行了二進制檢查)
  • 如果插入新實體,則不允許覆蓋現有映像。
  • 將圖像命名為主鍵(1.jpg,2.jpg)
  • 加載圖片時,不要假設圖片會在那里。
  • 禁止(如果可能)與圖像進行手動交互(禁止在機器中進行遠程處理並將圖像從一個地方復制到另一個地方)。 手動交互可能會導致不一致。

但我認為出於某種原因您應該這樣做。 因此,為了實現您想要的:

數據庫設計

  • 在表中創建一個二進制列(binary或varbinary)
  • 最好在具有1-1關系的其他表中創建它。 但是,這種想法是避免在為實體充水時加載圖像。 僅在需要時使用延遲加載方法加載圖像。
  • 當您進行較大選擇時(例如,如果要以組合方式加載所有實體,則應避免使用SELECT * From what),以避免加載圖像,因為它將無數次加載數千個圖像。 就像我說的,可以通過在不同的表中放置圖像,或者僅在SELECT中加載適當的列或進行延遲加載來完成。 (或者甚至更好,因為在數據庫中沒有圖像,只有路徑)

C#代碼

代碼很簡單,但是為什么要使用數據庫呢? 如果這是一個網站,為什么不將其保存到磁盤上可以輕松引用的位置?

優化數據庫以存儲已知大小和相對較小的數據。 您的映像很可能會超過8KB的長度(將其稱為MAX數據類型)。 圖像將與“配置文件”存儲在單獨的行/頁面上。

我個人將圖像保存在一個已知的文件夾中,並使用ID作為圖像名稱。 對於沒有圖像並使用標准gif或類似圖片的配置文件,可以通過將配置文件ID的simlinks / hardlinks設置為通用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();
        }
    }
}

我認為以下鏈接可以為您提供解決方案,

上傳圖片並保存到數據庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM