在ASP.NET中把圖片儲存到SQL SERVER資料庫

來源:互聯網
上載者:User
asp.net|server|資料|資料庫 介紹
在很多情況下,我們需要把圖片儲存到資料庫中。在某些應用程式中,存在一些敏感資訊不能被儲存到檔案系統中,因為儲存在檔案系統上的任何圖片都很容易被使用者非法獲得。

本文將討論在ASP.NET中怎樣把圖片儲存到SQL SERVER資料庫中。

在本文中我們將瞭解到以下幾方面的內容:

l???????? 上傳圖片檔案的要求

l???????? 使用Strem對象

l???????? 獲得上傳圖片大小和類型

l???????? 如何使用InputStream方法?

上傳圖片檔案的要求

在開始上傳前我們需要作兩件重要的事情

#Form標記的enctype屬性需要被設定為如下形式:

enctype="multipart/form-data"

#提供一個讓使用者選擇圖片檔案的Html控制項:



#還要引用System.IO命名空間來處理Strem對象

上述的三項都要應用到aspx頁中。在SQL SERVER中還有以下的一些要求:

#一個至少有一個欄位類型為Image的表

#另外有一個用來儲存圖片類型的Varchar類型的欄位就更好了

那麼,我們有了一個有Image欄位類型的資料表和一個(HTML檔案控制項)。我們還需要一個提交按鈕,當使用者選擇好圖片後可以點擊它。在按鈕的OnClick事件中我們要獲得圖片檔案的內容並最終把它插入到資料表中。讓我們來看看按鈕的OnClick事件,它讀取圖片並把圖片插入到資料表中。

提交按鈕的OnClick事件代碼

?

??Dim intImageSize As Int64
????Dim strImageType As String
????Dim ImageStream As Stream

????' Gets the Size of the Image
????intImageSize = PersonImage.PostedFile.ContentLength

????' Gets the Image Type
????strImageType = PersonImage.PostedFile.ContentType

????' Reads the Image
????ImageStream = PersonImage.PostedFile.InputStream

????Dim ImageContent(intImageSize) As Byte
????Dim intStatus As Integer
????intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

????' Create Instance of Connection and Command Object
????Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
????Dim myCommand As New SqlCommand("sp_person_isp", myConnection)

????' Mark the Command as a SPROC
????myCommand.CommandType = CommandType.StoredProcedure

????' Add Parameters to SPROC
????Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)
????prmPersonImage.Value = ImageContent
????myCommand.Parameters.Add(prmPersonImage)

????Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
????prmPersonImageType.Value = strImageType
????myCommand.Parameters.Add(prmPersonImageType)

????Try
????????myConnection.Open()
????????myCommand.ExecuteNonQuery()
????????myConnection.Close()
????????Response.Write("New person successfully added!")
????Catch SQLexc As SqlException
????????Response.Write("Insert Failed. Error Details are: " & SQLexc.ToString())
????End Try

?

它是如何工作的?

對象PersonImage 是HTMLInputFile 控制項。首先我們要獲得被插入圖片的大小,通過如下方法實現:

intImageSize = PersonImage.PostedFile.ContentLength

接著要通過ContenType屬性獲得圖片類型。最後最重要的是要獲得圖片檔案流,通過如下方法實現:

ImageStream = PersonImage.PostedFile.InputStream

我們有一個byte數組ImageContent,準備用來儲存圖片內容。整個圖片通過Stream對象的Read方法讀取,這個方法有三個參數,即:

#被複製的圖片內容的目標位置

#讀的開始位置

#需要被讀的子節數

讀聲明如下:

intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

現在,我們讀取了整個圖片內容。接著我們需要把圖片內容插入SQL資料表中,我們將用用一個預存程序把圖片類型和圖片插入SQL資料表。如果你看過上面的代碼清單,你就知道我們把資料類型設定為SqlDbType.Image.就這樣,我們成功地把圖片儲存到了SQL SERVER資料庫。

例子的輸出範例



圖:將圖片儲存到sql server 資料庫

測試下面的代碼

代碼下載

點擊這裡下載ASPX頁

點擊這裡下載預存程序

總結

這樣,我們完成了怎樣把圖片儲存到資料庫的討論。我們也準備好了使用上面的下載部分提供的例子和預存程序。如果你想知道怎樣從SQL SERVER中讀取圖片,請參閱我的這篇文章Retrieving Images from SqlServer in ASP .NET

譯者註:由於受到HTTP傳輸協議的限制,在不同的環境下能夠上傳檔案的大小不一。對於要上傳大檔案的WEB應用程式來說,這並不是一個完美的解決方案,只是為我們提供了一種相對較好的方法。我曾經用這種方法在區域網路中成功上傳30M的檔案,但是在系統效能較低的另外一個本機系統中,最多隻能上傳5M的資料。另外需要讀者注意的是,上傳大檔案的時候要適當修改machine.config和web.config檔案,只要你開啟這些檔案就可以知道怎樣適當的修改。初次翻譯,還望大家多多指正。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.