1. 程式人生 > >asp.net中將圖片或檔案存入資料庫並讀取顯示在image控制元件中

asp.net中將圖片或檔案存入資料庫並讀取顯示在image控制元件中

      最近在做一個專案時,發現數據庫的設計是把圖片的存放欄位設定成了image型別。這就說明你只能把檔案存入到資料庫中,這個做法不是我常用的,只存圖片路徑的方法。所以就上網去查了一下。大體做法都一樣。但是有一點不好的就是,你在上傳圖片的時候,無法對圖片進行預覽。根據這一點我自己做了一些改動。下面把程式碼放上來,大家看一下。
這個是將圖片檔案轉化為二進位制流,this.image1.ImgeUrl = this.File1.PageedFile.FileName就可以把圖片顯示出來,這裡有一個問題是,你不能單獨做一個按鈕來讓image控制元件顯示圖下,否則你存入資料庫的就為空了.
if(this.File1.PostedFile.ContentLength!=0)
            
{
                
if(this.File1.PostedFile.ContentType=="image/bmp"||this.File1.PostedFile.ContentType=="image/pjpeg"
||this.File1.PostedFile.ContentType=="image/gif"||this.File1.PostedFile.ContentType=="application/octet-stream")
                
{
                    
this.Image1.ImageUrl =this.File1.PostedFile.FileName;
                    Byte
{} fileByteArray =new Byte[this.File1.PostedFile.ContentLength]; 
                    Stream streamObject 
=this.File1.PostedFile.InputStream;
                    streamObject.Read(fileByteArray,
0,this.File1.PostedFile.ContentLength);
                }

                
else
                
{
                     Response.Write(
"<script>alert('對不起,你輸入的圖片格式不對!');</script>");
                }

            }
存入的時候大家採用一般的
string sql="insert into download(fileName,ffileData) values('"+fileName+"','"+fileData+"')";

                SqlCommand cmd
=new SqlCommand(sql,con);//啟用儲存過程

                cmd.CommandType
=CommandType.StoredProcedure;//指定型別

                cmd.Parameters.Add(
"@fileName",SqlDbType.VarChar,200);

                cmd.Parameters[
"@fileName"].Value=fileName;

                cmd.Parameters.Add(
"@fileData",SqlDbType.Image);

                cmd.Parameters[
"@fileData"].Value=fileByteArray;

                cmd.ExecuteNonQuery();

 這時是把相應的資訊存入。其實最難的就是在修改資訊時,你如何讓圖片顯示在image控中。這裡我採用的是另寫一個頁面this.image1.imageURl = "aa.aspx?id="+這裡是你的資訊的ID號+"".這樣我們只要讓圖片在aa.aspx裡顯示出來就可以了。程式碼如下
string strsql ="select  * from EnterPrise where FEPId = "+Convert.ToInt32(Request.QueryString["id"])+"";                            
SqlDataReader dr 
= cfdb.returnReader(strsql);//這裡我呼叫的是我的方法,你可以使用你的
if(dr.Read())
                
{
                    
                    
byte[] file=(Byte[])dr["FFicImage"]; //把圖片資訊取出來
                    Response.BinaryWrite(file);    //讓他顯示出來
                    
                }

                dr.Close();
好了,這樣在修改的時候,你的圖片就可以顯示出來了。
說實話,我不喜歡這種存圖片的方法。一是資料庫會變大。二是很不方便。雖然它可以讓一些木馬程式無法執行。可是asp.net中給提供的PostedFile.ContentType就很好用啊。呵呵。。。。。。。。
可能是我的技術有限。無法理解其中的奧祕吧。