首頁>Club>
11
回覆列表
  • 1 # 慧鳥先飛

    資料庫存圖片的方式以下兩種:

    在資料庫中儲存圖片檔案的檔名或儲存路徑(本地路徑或者網路路徑)

    這是最常用的方式,即是將圖片的儲存的完整路徑或檔名以字串的方式存入到資料庫中,讀取效率高、而且便於維護。實現的方法也比較簡單,拿最常見的使用場景來說吧,比如使用者註冊時,需要他上傳了一張照片,常見做法就是使用檔案控制元件FileUpload讓使用者選擇電腦的上面的圖片,然後將其選擇的圖片所在的路徑及檔名獲取,將檔案上傳後同時將檔名儲存到資料庫對應的表中,顯示圖片時只需要從資料庫中獲取檔名並構造完整路徑即可。

    ASP.NET

    程式碼如下:

    //獲取FileUpload控制元件選取圖片後的檔案路徑

    strng filepath=FileUpload1.PostedFile.FileName;

    //獲取圖片檔名,即從圖片路徑字串中獲取最後\\的那段

    string filename=filepath.Substring(filepath.LastIndexOf("\\")+1);

    //然後執行檔案上傳,將檔案儲存到伺服器指定的目錄,如在程式目錄下建立一個PIC資料夾儲存檔案

    FileUpload1.PostedFile.SaveAs(Server.MapPath("PIC/")+filename);

    上傳成功後,將檔名filename字串插入資料庫即可。

    顯示時將filename從資料取出,用Image1.ImageUrl="PIC/"+filename 顯示。

    將圖片檔案轉為二進位制檔案流儲存到資料庫,顯示時再二進位制轉為檔案

    這種方式很少用,因為圖片包含的資訊比較多,轉為二進位制後儲存的內容大,佔用空間,而且需要轉換,費時好資源。

    儲存圖片的 核心程式碼如下:

    //檔案路徑

    string picturePath = @"D:\1.jpg";

    //建立FileStream物件

    FileStream fs = new FileStream(picturePath, FileMode.Open, FileAccess.Read);

    //宣告Byte陣列

    Byte[] mybyte = new byte[fs.Length];

    //讀取資料

    fs.Read(mybyte, 0, mybyte.Length);

    fs.Close();

    //轉換成二進位制資料 mybyte 儲存到資料庫

    SqlParameter prm = new SqlParameter

    ("@blobdata", SqlDbType.VarBinary, mybyte.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, mybyte);

    command.Parameters.Add(prm);

    //開啟資料庫連線

    connection.Open();

    command.ExecuteNonQuery();

    connection.Close();

    讀取圖片的核心程式碼如下:

    //開啟資料庫連線

    connection.Open();

    //建立SQL語句

    string sql = "select BLODID,BLOBData from Images order by BLODID";

    //建立SqlCommand物件

    SqlCommand command = new SqlCommand(sql, connection);

    //建立DataAdapter物件

    SqlDataAdapter dataAdapter = new SqlDataAdapter(command);

    //建立DataSet物件

    DataSet dataSet = new DataSet();

    dataAdapter.Fill(dataSet, "BLOBTest");

    int c = dataSet.Tables["BLOBTest"].Rows.Count;

    if (c > 0)

    {

    Byte[] mybyte = new byte[0];

    mybyte = (Byte[])(dataSet.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]);

    MemoryStream ms = new MemoryStream(mybyte);

    //顯示圖片

    pictureBox1.Image = Image.FromStream(ms);

    }

    connection.Close();

  • 2 # 資料指揮

    這涉及到欄位型別的問題,如果使用二進位制型別的欄位就可以存放圖片欄位了!

    我想題主要問的是如何將圖片寫入到資料庫吧,這確實是個問題,檔案是流,那寫入也得使用流了,這就要求資料庫驅動提供流寫入方式了,還好大多驅動都實現了方法,比如JDBC,ODBC等,實在太多了,不過某些框架不提供功能!

  • 3 # 網路圈

    對於一款系統而言,難免會涉及到使用者上傳的圖片資料,為了保證資料落地我們需要把圖片資訊存入在資料庫中,解決方案主要有以下兩種:

    1、將圖片路徑存入資料庫中

    這種做法是我們推薦的,因為資料資料一般較多較大,為便於存取我們一般將圖片上傳到伺服器的某個目錄中,然後將其引用路徑儲存到資料庫中。這樣一來,某條記錄展示時就能找到與之對應的圖片路徑,然後載入引用即可。

    2、將圖片以二進位制資料流形式寫入資料庫欄位中

    這種做法並不推薦,因為效能較低、佔用儲存空間較大,不利於資料庫最佳化。具體做法是:圖片上傳時讀取此圖的二進位制資料,然後存入資料庫欄位中,這裡對資料庫欄位型別也是有一定要求的,比如說:MySQL中欄位選BLOB型別、SQL Server中選image型別。

    將圖片二進位制資料存入資料庫後,如果要顯示圖片則需要從資料庫中查詢獲取到二進位制資料,然後前端讀取base64二進位制字串,說實話這種形式不夠優雅。

  • 4 # 信管學堂

    資料庫內部儲存圖片記憶體消耗太大,而且速度很慢,一般在開發的時候報圖片單獨放在一個images資料夾裡,在資料庫裡存放圖片的儲存路徑,當開發的時候訪問資料庫時就可以把圖片加載出來。

  • 中秋節和大豐收的關聯?
  • 你在韓國能看到多少日本車?