一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - asp.net(c#)實現(xiàn)從sqlserver存取二進制圖片的代碼

asp.net(c#)實現(xiàn)從sqlserver存取二進制圖片的代碼

2019-09-19 12:11asp.net開發(fā)網(wǎng) ASP.NET教程

有一個員工表Employee,需要保存員工照片(Photo)到數(shù)據(jù)庫(sql server)上。員工照片對應(yīng)的字段是varbinary(max),也就是要存成二進制文件類型(這和以前討巧地存圖片文件路徑就不相同了),默認可以為空。

下面說說主要實現(xiàn)思路: 
1、存取圖片 
(1)、將圖片文件轉(zhuǎn)換為二進制并直接存進sql server 

復(fù)制代碼代碼如下:


//UploadHelper.cs 
/// <summary> 
/// 將圖片轉(zhuǎn)化為長二進制 
/// </summary> 
/// <param name="photopath"></param> 
/// <returns></returns> 
public static Byte[] SetImgToByte(string imgPath) 

FileStream file = new FileStream(imgPath, FileMode.Open, FileAccess.Read); 
Byte[] byteData = new Byte[file.Length]; 
file.Read(byteData, 0, byteData.Length); 
file.Close(); 
return byteData; 

/// <summary> 
/// 將轉(zhuǎn)換成二進制碼的圖片保存到數(shù)據(jù)庫中 
/// </summary> 
public static bool SaveEmployeeImg2Db(Employee model, string path) 

try 

Byte[] imgBytes = SetImgToByte(path); 
model.Photo = imgBytes; 
bool flag=EmployeeService.SaveEmployeePhoto(model); //EmployeeService是公司內(nèi)部的庫調(diào)用,插入或者更新照片,這里不透露細節(jié) 
return flag; 

catch (Exception ex) 

throw ex; 


(2)、在網(wǎng)頁中上傳圖片 

復(fù)制代碼代碼如下:


/// <summary> 
/// 上傳圖片 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
protected void btnUpload_Click(object sender, EventArgs e) 

string serverPath = Server.MapPath("~/images/"); 
if (this.fuPhoto.HasFile) //fuPhoto是fileupload控件 

string fileName = this.fuPhoto.PostedFile.FileName; 
FileInfo fi = new FileInfo(fileName); 
string mimeType = this.fuPhoto.PostedFile.ContentType.ToLower(); 
if (mimeType.IndexOf("image") < 0) 

//("上傳的照片格式不對"); 

else if(fi.Length > 2* 1024 * 1024) 

//圖片大于2M,重新處理 

else 

string saveFilePath = serverPath + DateTime.Now.ToString("yyyyMMddHHmmss") + fileName; 
try 

//先存圖片到服務(wù)器 
this.fuPhoto.PostedFile.SaveAs(saveFilePath); 
//轉(zhuǎn)成二進制 
Employee model = new Employee(int.Parse(id)); //id是EmployeeId,這里是模擬字段 
bool flag = UploadHelper.SaveEmployeeImg2Db(model, saveFilePath); 

catch 

//("照片上傳失敗"); 

finally 

//最后刪掉該圖片 
if (System.IO.File.Exists(saveFilePath)) 

System.IO.File.Delete(saveFilePath); 




else 

//("全選擇要上傳的照片"); 


(3)、從數(shù)據(jù)庫取出照片(返回格式Image) 

復(fù)制代碼代碼如下:


//UploadHelper.cs 
/// <summary> 
/// 將二進制轉(zhuǎn)化為圖片Image 
/// </summary> 
/// <param name="photopath"></param> 
/// <returns></returns> 
public static System.Drawing.Image GetImgFromByte(Employee model) 

System.Drawing.Image img = null; 
try 

Stream stream = new MemoryStream(model.Photo); 
img = System.Drawing.Image.FromStream(stream,false); 

catch 

img = null; 

return img; 


上面的這個方法取出來之后,如果在winform下,直接給一個PictureBox的Image屬性賦值就可以了。可是web下沒有這么強大的控件,所以,就有了下面的步驟。 
2、直接在網(wǎng)頁中以流的形式顯示圖片 
(1)、生成圖片流頁面(ImgHelper .aspx) 
這個頁面的設(shè)計頁面什么也沒有,類文件如下: 

復(fù)制代碼代碼如下:


using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Collections.Generic; 
using System.IO; 
/// <summary> 
/// 圖片輔助類 
/// </summary> 
public partial class ImgHelper : System.Web.UI.Page 

protected void Page_Load(object sender, EventArgs e) 

if (!string.IsNullOrEmpty(Request["employeeId"])) //需要顯示照片的頁面?zhèn)鬟f的員工id 

int employeeId = int.Parse(Request["employeeId"]); 
Employee model = //EmployeeService.GetEmployeeByCondition(new Employee(employeeId))[0] as Employee; //內(nèi)部函數(shù) 查找一個員工 不透漏細節(jié) 
try 

Byte[] byteImg = model.Photo; 
Stream stream = new MemoryStream(byteImg); 
System.Drawing.Bitmap img =(System.Drawing.Bitmap) System.Drawing.Bitmap.FromStream(stream, false); //轉(zhuǎn)換成Bitmap 
Response.Buffer = false; 
Response.ContentType = "image/jpg"; 
Response.AddHeader("Content-Disposition", "attachment;filename=photo.jpg");//照片名稱叫photo.jpg 
Response.BinaryWrite(byteImg);//寫入二進制流 
Response.End(); 

catch 

Response.End(); 




(2)、顯示照片的頁面調(diào)用ImgHelper .aspx 
在頁面加載的時候,給圖片控件賦值如下: 

復(fù)制代碼代碼如下:


this.imgPhoto.ImageUrl = "/ImgHelper.aspx?employeeId="+tmpEmployee.Id.ToString(); //imgPhoto是圖片控件 


總體來說,一存一取,對于winform是很方便的,但是對于webform,我們需要稍微有一個轉(zhuǎn)化的思路。如果有牛人寫出像winform下那種直接綁定Image對象的控件更好了。上面代碼測試通過,希望對你有幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久久久久久久久久 | 亚洲福利视频一区 | 四虎网站网址 | 校花在公车上被内射好舒 | 国产亚洲精品高清在线 | 91制片厂制作传媒网站 | 国产亚洲一级精品久久 | 美女脱了内裤张开腿亲吻男生 | 日本亚洲免费 | 国产清纯女高中生在线观看 | 国产视频中文字幕 | 亚洲国产区男人本色在线观看欧美 | 激情偷拍网 | 久久99亚洲AV无码四区碰碰 | 国产精品免费久久久久影院小说 | 美女脱得一二净无内裤全身的照片 | 国产免费视频 | aaaa大片 | 双性人bbww欧美双性 | 日本精品一区二区在线播放 | 国产高清一区二区三区免费视频 | 色偷偷亚洲男人 | 亚洲国产精品嫩草影院永久 | 精品国产免费一区二区三区 | 草莓永久地域网名入2022 | 喜爱夜蒲2三级做爰 | 91资源站| 国产免费资源高清小视频在线观看 | 男人天堂网站在线 | 亚洲精品久久久成人 | 久久水蜜桃亚洲AV无码精品偷窥 | 亚洲区精品久久一区二区三区 | 精品成人一区二区三区免费视频 | 亚1洲二区三区四区免费 | 欧美乱码视频 | 色久激情| 免费观看日本视频 | 99在线免费观看视频 | 校园肉文高h | 精品一区heyzo在线播放 | 暖暖 免费 高清 中文 日本 |