《2022年C#存取二进制图片 .pdf》由会员分享,可在线阅读,更多相关《2022年C#存取二进制图片 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、有一个员工表Employee,需要保存员工照片(Photo)到数据库(sql server)上。员工照片对应的字段是varbinary(max), 也就是要存成二进制文件类型(这和以前讨巧地存图片文件路径就不相同了) ,默认可以为空。下面说说主要实现思路:1、存取图片(1) 、将图片文件转换为二进制并直接存进sql server /UploadHelper.cs / / 将图片转化为长二进制/ / photopath / public static Byte SetImgToByte(string imgPath) FileStream file = new FileStream(imgPat
2、h, FileMode.Open, FileAccess.Read); Byte byteData = new Bytefile.Length; file.Read(byteData, 0, byteData.Length); file.Close(); return byteData; / / 将转换成二进制码的图片保存到数据库中/ public static bool SaveEmployeeImg2Db(Employee model, string path) try Byte imgBytes = SetImgToByte(path); model.Photo = imgBytes;
3、bool flag=EmployeeService.SaveEmployeePhoto(model); /EmployeeService是公名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 司内部的库调用,插入或者更新照片,这里不透露细节return flag; catch (Exception ex) throw ex; (2) 、在网页中上传图片/ / 上传图片/ / sender / e protected void btn
4、Upload_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 (mime
5、Type.IndexOf(image) 2* 1024 * 1024) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - /图片大于2M ,重新处理 else string saveFilePath = serverPath + DateTime.Now.ToString(yyyyMMddHHmmss) + fileName; try /先存图片到服务器this.fuPhoto.PostedFile.SaveAs(saveFile
6、Path); /转成二进制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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
7、- - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - else /( 全选择要上传的照片); (3) 、从数据库取出照片(返回格式Image)/UploadHelper.cs / / 将二进制转化为图片Image / / photopath / public static System.Drawing.Image GetImgFromByte(Employee model) System.Drawing.Image img = null; try Stream stream = new MemoryStream(m
8、odel.Photo); img = System.Drawing.Image.FromStream(stream,false); catch img = null; return img; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 上面的这个方法取出来之后,如果在 winform 下,直接给一个PictureBox 的 Image 属性赋值就可以了。可是web 下没有这么强大的控件,所以,就有了下面的步骤。2、直接在网页
9、中以流的形式显示图片(1) 、生成图片流页面(ImgHelper .aspx )这个页面的设计页面什么也没有,类文件如下: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 Syste
10、m.Web.UI.HtmlControls; using System.Collections.Generic; using System.IO; / / 图片辅助类/ public partial class ImgHelper : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) if (!string.IsNullOrEmpty(RequestemployeeId) /需要显示照片的页面传递的员工id 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
11、- - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - int employeeId = int.Parse(RequestemployeeId); Employee model = /EmployeeService.GetEmployeeByCondition(new Employee(employeeId)0 as Employee; / 内部函数查找一个员工不透漏细节try Byte byteImg = model.Photo; Stream stream = new MemoryStream(byteImg); Syst
12、em.Drawing.Bitmap img =(System.Drawing.Bitmap) System.Drawing.Bitmap.FromStream(stream, false); / 转换成 Bitmap Response.Buffer = false; Response.ContentType = image/jpg; Response.AddHeader(Content-Disposition, attachment;filename=photo.jpg);/ 照片名称叫photo.jpg Response.BinaryWrite(byteImg);/ 写入二进制流Respon
13、se.End(); catch Response.End(); (2) 、显示照片的页面调用ImgHelper .aspx 在页面加载的时候,给图片控件赋值如下:this.imgPhoto.ImageUrl = /ImgHelper.aspx?employeeId=+tmpEmployee.Id.ToString(); /imgPhoto 是图片控件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 总体来说,一存一取,对于winform 是很方便的,但是对于webform ,我们需要稍微有一个转化的思路。 如果有牛人写出像winform 下那种直接绑定Image 对象的控件更好了。上面代码测试通过,希望对你有帮助。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -
限制150内