C#+asp.net+sql資料庫完成圖片的儲存與讀取
我們在使用asp.net時經常會用到資料庫對圖片進行儲存和讀取,因此筆者對此進行了仔細研究,圖片的儲存和讀取有兩種方式:
一.以圖片的url地址的方式
在以圖片url地址的方式中,我們向資料庫中儲存的不是圖片本身,而是圖片的地址,讀取圖片的時候也是圖片的地址,根據儲存的地址定位到指定的圖片,首先筆者將講解圖片儲存到sql資料庫中的實現方法。
1.儲存圖片
1)在資料庫的表中定義一個用來儲存圖片路徑的欄位,型別為nchar(40),長度按自己要求設定;
2)我們通過網路將圖片上傳至伺服器,將圖片儲存到伺服器指定的路徑,因此我們需要建立一個資料夾“img'專門放置上傳的圖片,而我們資料庫中將要儲存的地址也是這個資料夾的地址;
3)在aspx檔案的Form 標記的 enctype 屬性應該設定成 enctype="multipart/form-data",網頁中放置一個web控制元件System.Web.UI.WebControls.FileUpload,這個控制元件是asp.net中專門用於上傳檔案的(html中是Input(file)),控制元件命名為‘inputfile’,另外新增一個按鈕button1,點選按鈕執行程式碼:
//設定儲存路徑
string filepath = HttpContext.Current.Server.MapPath("~/img/");
string filefullname = filepath + inputfile.FileName;
inputfile.SaveAs(filefullname);
string connstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Data.mdf;Integrated Security=True;User Instance=True";
SqlConnection con = new SqlConnection(connstring);
con.Open();
string cmd = "insert into [user]([username],[password],[imgurl]) values(
SqlCommand dcmd = new SqlCommand(cmd, con);
dcmd.ExecuteNonQuery();
這樣我們就講上傳的圖片儲存到了img資料夾中,其url地址儲存到了資料庫中。
2.讀取圖片
下面是實現從資料庫中讀取圖片地址並在Image控制元件中顯示出來,我們只需進行一般的資料庫讀取得到imgurl欄位的值,然後將欄位值賦給Image控制元件的ImageUrl屬性,程式碼如下:
cmd="select [imgurl] from [user] where ([username]='
dcmd = new SqlCommand(cmd, con);
SqlDataReader reader = dcmd.ExecuteReader();
reader.Read();
string path = reader[0].ToString();
Image1.ImageUrl = path;
這樣我們就可以在Image控制元件中看到該圖片.
二.以二進位制圖片的方式
圖片在資料庫中另一種儲存方式就是將圖片變為二進位制方式存入,但是這種方式在讀取並在Image控制元件中顯示比較麻煩。下面我們來看實現方法:
1.儲存圖片
儲存圖片前,我們需要在資料庫的表中新增image型別的欄位,用於存放二進位制的圖片
public byte[] AddImg(System.Web.UI.WebControls.FileUpload inputimg, string ImageType, Int32 maxsize)
{
Int32 ImageSize;
String strImageType;
Stream ImageStream;
strImageType = inputimg.PostedFile.ContentType;
if (strImageType != ImageType)
{
Response.Write("<script>alert('圖片型別為'" + strImageType + ")</script>");
}
ImageSize = inputimg.PostedFile.ContentLength;
if (ImageSize > maxsize)
{
Response.Write("<script>alert('圖片不得大於'" + maxsize + "k)</script>");
}
ImageStream = inputimg.PostedFile.InputStream;
byte[] ImageContent = new byte[ImageSize];
int imgstatus = ImageStream.Read(ImageContent, 0, ImageSize);
return ImageContent;
}
然後在button點選事件程式碼:
byte[] imageContent;
imageContent = AddImg(inputfile, "image/pjpeg", 512000);
string connstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Data.mdf;Integrated Security=True;User Instance=True";
SqlConnection con = new SqlConnection(connstring);
con.Open();
string cmd = "insert into[user]([username],[password],[headimg]) values(‘_username','_password',@image)";
SqlParameter prm = new SqlParameter("@image", SqlDbType.VarBinary, imageContent.Length, ParameterDirection.Input, false,
0, 0, null, DataRowVersion.Current, imageContent);
SqlCommand dcmd = new SqlCommand(cmd, con);
dcmd.Parameters.Add(prm);
dcmd.ExecuteNonQuery();
這樣我們就將圖片存入了資料庫
2.讀取圖片
但是這種方式在我們讀取顯示的方式有些不同,並不能直接根據url讓Image控制元件顯示
cmd = "select [headimg] from [user] where ([username]='_username')";
dcmd = new SqlCommand(cmd, con);
SqlDataReader reader = dcmd.ExecuteReader();
reader.Read();
byte[] img = (byte[])reader[0]; ;
con.Close();
Response.BinaryWrite(img);//這樣我們就將圖片寫入二進位制輸出流,在網頁中顯示
但如果我們像讓其顯示在Image控制元件,必須將圖片從資料庫中儲存到資料夾為圖片,將圖片url賦值給ImageUrl。