一介紹
可能有很多的時候我們急需把圖片存入到數據庫當中在一些應用程序中我們可能有一些敏感的資料由於存儲在文件系統(file system)中的東西將很容易被某些用戶盜取所以這些數據不能存放在文件系統中
在這篇文章中我們將討論怎樣把圖片存入到Sql當中
在這篇文章中我們可以學到以下幾個方面的知識
插入圖片的必要條件
使用流對象
查找准備上傳的圖片的大小和類型
.怎麼使用InputStream方法?
在我們開始上傳之前有兩件重要的事我們需要做
(1)Form 標記的 enctype 屬性應該設置成 enctype=multipart/formdata
(2) 需要一個<input type=file>表單來使用戶選擇他們要上傳的文件同時我們需要導入 SystemIO名稱空間來處理流對象
把以上三點應用到aspx頁面同時我們需要對SqlServer做以下的准備
(1)需要至少含有一個圖片類型的字段的表
(2)如果我們還有另外一個變字符類型的字段來存儲圖片類型那樣會更好一些
現在我們准備了一個Sql表(包含了一個image數據類型的字段)還有<input type=file>標記當然我們還得准備Submit按鈕以便用戶在選擇了圖片以後提交在這個按鈕的Onclick事件裡我們需要讀取選取圖片的內容然後把它存入到表裡那我們先來看看這個Onclick事件
提交按鈕的Onclick事件的代碼
Dim intImageSize As Int
Dim strImageType As String
Dim ImageStream As Stream
Gets the Size of the Image
intImageSize = PersonImagePostedFileContentLength
Gets the Image Type
strImageType = PersonImagePostedFileContentType
Reads the Image
ImageStream = PersonImagePostedFileInputStream
Dim ImageContent(intImageSize) As Byte
Dim intStatus As Integer
intStatus = ImageStreamRead(ImageContent intImageSize)
Create Instance of Connection and Command Object
Dim myConnection As New SqlConnection(ConfigurationSettingsAppSettings(ConnectionString))
Dim myCommand As New SqlCommand(sp_person_isp myConnection)
Mark the Command as a SPROC
myCommandCommandType = CommandTypeStoredProcedure
Add Parameters to SPROC
Dim prmPersonImage As New SqlParameter(@PersonImage SqlDbTypeImage)
prmPersonImageValue = ImageContent
myCommandParametersAdd(prmPersonImage)
Dim prmPersonImageType As New SqlParameter(@PersonImageType SqlDbTypeVarChar )
prmPersonImageTypeValue = strImageType
myCommandParametersAdd(prmPersonImageType)
Try
myConnectionOpen()
myCommandExecuteNonQuery()
myConnectionClose()
ResponseWrite(New person successfully added!)
Catch SQLexc As SqlException
ResponseWrite(Insert Failed Error Details are: & SQLexcToString())
End Try
這是怎麼工作的呢?
PersonImage是HTMLInputFile控件的對象首先需要獲得圖片的大小可以使用下面的代碼實現
intImageSize = PersonImagePostedFileContentLength
然後返回圖片的類型使用ContenType屬性最後也是最重要的事就是取得Image Stream這可以用以下代碼實現
ImageStream = PersonImagePostedFileInputStream
我們需要一個字節型數組來存儲image 內容讀取整個圖片可以使用Stream對象的Read方法來實現Read(in byte[] bufferint offsetint count)方法有三個參數【關於Read方法的詳細內容可以參看Net FrameWorkSDK】 他們是
buffer 字節數組此方法返回時該緩沖區包含指定的字符數組該數組的 offset 和 (offset + count) 之間的值由從當前源中讀取的字節替換
offset buffer 中的從零開始的字節偏移量從此處開始存儲從當前流中讀取的數據
count 要從當前流中最多讀取的字節數
這個Read方法用以下代碼實現
intStatus = ImageStreamRead(ImageContent intImageSize)
現在我們已經讀取了整個圖片的內容下一步我們要把這些內容存入到sql 表我們將使用存儲過程來完成插入圖片類型和圖片內容到sql 表如果你浏覽了上面的代碼你將會發現我們使用了sqldbtypeimage的數據類型(datatype)Ok了完成了這些我們也就成功的把圖片存入到SqlServer中了下面是我們編寫的aspx頁面
二結論
我們已經討論了如何把圖片存入到Sql Server那麼我們如何從SqlServer中讀取圖片呢?可以參看我的另一篇文章在AspNet中從SqlServer中檢索圖片
From:http://tw.wingwit.com/Article/program/net/201311/15186.html