如何在ASP.Net 中把圖片存入數(shù)據(jù)庫
可能有很多的時(shí)候 我們急需把圖片存入到數(shù)據(jù)庫當(dāng)中 在一些應(yīng)用程序中 我們可能有一些敏感的資料 由于存儲(chǔ)在文件系統(tǒng)(file system)中的東西 將很容易被某些用戶盜取 所以這些數(shù)據(jù)不能存放在文件系統(tǒng)中
在這篇文章中 我們將討論怎樣把圖片存入到Sql 當(dāng)中
在這篇文章中我們可以學(xué)到以下幾個(gè)方面的知識
插入圖片的必要條件
使用流對象
查找準(zhǔn)備上傳的圖片的大小和類型
.怎么使用InputStream方法?
在我們開始上傳之前 有兩件重要的事我們需要做
(1)Form 標(biāo)記的 enctype 屬性應(yīng)該設(shè)置成 enctype= multipart/form data
(2) 需要一個(gè)<input type=file>表單來使用戶選擇他們要上傳的文件 同時(shí)我們需要導(dǎo)入 System IO名稱空間來處理流對象
把以上三點(diǎn)應(yīng)用到aspx頁面 同時(shí)我們需要對SqlServer做以下的準(zhǔn)備
(1)需要至少含有一個(gè)圖片類型的字段的表
(2)如果我們還有另外一個(gè)變字符類型的字段來存儲(chǔ)圖片類型 那樣會(huì)更好一些
現(xiàn)在 我們準(zhǔn)備了一個(gè)Sql表(包含了一個(gè)image數(shù)據(jù)類型的字段) 還有<input type=file>標(biāo)記 當(dāng)然我們還得準(zhǔn)備Submit按鈕 以便用戶在選擇了圖片以后提交 在這個(gè)按鈕的Onclick事件里 我們需要讀取選取圖片的內(nèi)容 然后把它存入到表里 那我們先來看看這個(gè)Onclick事件
提交按鈕的Onclick事件的代碼
Dim intImageSize As Int Dim strImageType As StringDim ImageStream As Stream
Gets the Size of the ImageintImageSize = PersonImage PostedFile ContentLength
Gets the Image TypestrImageType = PersonImage PostedFile ContentType
Reads the ImageImageStream = PersonImage PostedFile InputStream
Dim ImageContent(intImageSize) As ByteDim intStatus As IntegerintStatus = ImageStream Read(ImageContent intImageSize)
Create Instance of Connection and Command ObjectDim myConnection As New SqlConnection(ConfigurationSettings AppSettings( ConnectionString ))Dim myCommand As New SqlCommand( sp_person_isp myConnection)
Mark the Command as a SPROCmyCommand CommandType = CommandType StoredProcedure
Add Parameters to SPROCDim prmPersonImage As New SqlParameter( @PersonImage SqlDbType Image)prmPersonImage Value = ImageContentmyCommand Parameters Add(prmPersonImage)
Dim prmPersonImageType As New SqlParameter( @PersonImageType SqlDbType VarChar )prmPersonImageType Value = strImageTypemyCommand Parameters Add(prmPersonImageType)
TrymyConnection Open()myCommand ExecuteNonQuery()myConnection Close()Response Write( New person successfully added! )Catch SQLexc As SqlExceptionResponse Write( Insert Failed Error Details are: & SQLexc ToString())End Try
這是怎么工作的呢? PersonImage是HTMLInputFile控件的對象 首先需要獲得圖片的大小 可以使用下面的代碼實(shí)現(xiàn)
intImageSize = PersonImage PostedFile ContentLength
然后返回圖片的類型使用ContenType屬性 最后 也是最重要的事就是取得Image Stream 這可以用以下代碼實(shí)現(xiàn)
ImageStream = PersonImage PostedFile InputStream
我們需要一個(gè)字節(jié)型數(shù)組來存儲(chǔ)image 內(nèi)容 讀取整個(gè)圖片可以使用Stream對象的Read方法來實(shí)現(xiàn) Read(in byte[] buffer int offset int count)方法有三個(gè)參數(shù) 【關(guān)于Read方法的詳細(xì)內(nèi)容可以參看 Net FrameWorkSDK】 他們是
buffer 字節(jié)數(shù)組 此方法返回時(shí) 該緩沖區(qū)包含指定的字符數(shù)組 該數(shù)組的 offset 和 (offset + count) 之間的值由從當(dāng)前源中讀取的字節(jié)替換
offset buffer 中的從零開始的字節(jié)偏移量 從此處開始存儲(chǔ)從當(dāng)前流中讀取的數(shù)據(jù)
count 要從當(dāng)前流中最多讀取的字節(jié)數(shù)
這個(gè)Read方法用以下代碼實(shí)現(xiàn) intStatus = ImageStream Read(ImageContent intImageSize) 現(xiàn)在 我們已經(jīng)讀取了整個(gè)圖片的內(nèi)容 下一步 我們要把這些內(nèi)容存入到sql 表 我們將使用存儲(chǔ)過程來完成插入圖片類型和圖片內(nèi)容到sql 表 如果你瀏覽了上面的代碼 你將會(huì)發(fā)現(xiàn)我們使用了sqldbtype image的數(shù)據(jù)類型(datatype) Ok了 完成了這些 我們也就成功的把圖片存入到SqlServer中了 下面是我們編寫的aspx頁面
二 結(jié)論
lishixinzhi/Article/program/net/201311/15186
相關(guān)評說:
泰安市直齒: ______ 鑒于很多同學(xué)咨詢,如何向數(shù)據(jù)庫中存儲(chǔ)并讀取圖片的方法.在此給出代碼,供大家參考.但個(gè)人建議,盡量少向數(shù)據(jù)庫中存儲(chǔ)如此大二進(jìn)制數(shù)據(jù),會(huì)造成數(shù)據(jù)庫過于膨脹,如果采用DataSet讀取數(shù)據(jù)...
泰安市直齒: ______ 這 個(gè)你要簡單的是吧 就是 把圖片另存到一個(gè)路徑下的指定文件夾下即可,ASP.NET代碼如下: string file = FileUpload1.FileName;//獲取文件名 //實(shí)例化一個(gè)隨機(jī)對象 Random rd = new Random(); string time= DateTime.Now.Ticks.ToString();// ...
泰安市直齒: ______ 上傳到數(shù)據(jù)庫需要轉(zhuǎn)成二進(jìn)制類型.圖片格式在Fileupload前進(jìn)行過濾 //將fileupload 里的圖片image類型轉(zhuǎn)成byte[] protected byte[] SetImageToByteArray(FileUpload FileUpload1) { Stream stream = FileUpload1.PostedFile.InputStream; byte[] photo...
泰安市直齒: ______ 1、“|”或者“,”都可以轉(zhuǎn)換成字節(jié)流保存到數(shù)據(jù)庫中2、個(gè)人認(rèn)為數(shù)據(jù)流保存到數(shù)據(jù)庫中應(yīng)該是這樣的格式:圖片,圖片.但是是保存成字節(jié)流的形式3、同樣,取的時(shí)候,就可以用這樣的方式把“|”或者“,”類似的字符用字節(jié)流獲取到.4、再進(jìn)行分隔應(yīng)該就可以了 tip:我沒有具體代碼實(shí)現(xiàn),不過大體過程應(yīng)該是這樣的
泰安市直齒: ______ 存圖片肯定是存圖片名稱啊. 比如你上傳一張圖片 a.jpg 到你站點(diǎn)的Images 文件夾.你只用存 a.jpg 或者 images/a.jpg這樣的字符串到數(shù)據(jù)庫里就行了.調(diào)用時(shí)直接調(diào)用<img src='<% 綁定數(shù)據(jù)%>' alt="圖片" /> 就可以了
泰安市直齒: ______ 1、可以直接放在服務(wù)器目錄里,數(shù)據(jù)庫記錄個(gè)存放的路徑. 2、可以將圖片用二進(jìn)制存放在數(shù)據(jù)庫中,用的時(shí)候在讀取出來.
泰安市直齒: ______ 1、建所需數(shù)據(jù)庫和表,語句如下: --建立數(shù)據(jù)庫 create database test --使用該數(shù)據(jù)庫 use test --建立存放圖片的表 create table piclist( id int Identity primary key, pic Image not null ) 2、制作上傳圖片的模塊,代碼如下: 前臺(tái)html代碼: <%@ Page...
泰安市直齒: ______ 數(shù)據(jù)庫中建一個(gè)表來存放圖片地址和鏈接地址,建一個(gè)url字段和img字段.上傳的時(shí)候,修改上傳的方法,添加到數(shù)據(jù)庫中時(shí),把想要加上的鏈接存放在url字段中.把圖片在服務(wù)器中的地址存放在img字段中.后臺(tái)管理頁面上,用<a>標(biāo)簽建立<img>標(biāo)簽將此圖片放上去,img.src="圖片地址"然后a.href="鏈接地址".用<% Eval(“url”) %>此方法也可.
泰安市直齒: ______ 你想對這個(gè)圖片進(jìn)行命名在保存完全是可以的啊,而且名字是可以隨機(jī)生成的一堆數(shù)字,保存的話根目錄就用~ 文件名就可以了 在就是圖片名了吧.
泰安市直齒: ______ 在Asp中存取數(shù)據(jù)庫圖片信息在Asp中存取數(shù)據(jù)庫圖片信息,必須: 1.用Request.BinaryRead()來獲取上傳的二進(jìn)制數(shù)據(jù). 2.用ADO.AppendChunk來存入數(shù)據(jù)庫,用ADO.GetChunk來獲取數(shù)據(jù). 3.用Response.BinaryWrite來顯示圖片. ...