asp.net(c#)实现从sqlserver存取二进制图片的代码

 更新时间:2021年9月22日 10:19  点击:1332
下面说说主要实现思路:
1、存取图片
(1)、将图片文件转换为二进制并直接存进sql server
复制代码 代码如下:

//UploadHelper.cs
/// <summary>
/// 将图片转化为长二进制
/// </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>
/// 将转换成二进制码的图片保存到数据库中
/// </summary>
public static bool SaveEmployeeImg2Db(Employee model, string path)
{
try
{
Byte[] imgBytes = SetImgToByte(path);
model.Photo = imgBytes;
bool flag=EmployeeService.SaveEmployeePhoto(model); //EmployeeService是公司内部的库调用,插入或者更新照片,这里不透露细节
return flag;
}
catch (Exception ex)
{
throw ex;
}
}

(2)、在网页中上传图片
复制代码 代码如下:

/// <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
{
//先存图片到服务器
this.fuPhoto.PostedFile.SaveAs(saveFilePath);
//转成二进制
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)、从数据库取出照片(返回格式Image)
复制代码 代码如下:

//UploadHelper.cs
/// <summary>
/// 将二进制转化为图片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、直接在网页中以流的形式显示图片
(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 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"])) //需要显示照片的页面传递的员工id
{
int employeeId = int.Parse(Request["employeeId"]);
Employee model = //EmployeeService.GetEmployeeByCondition(new Employee(employeeId))[0] as Employee; //内部函数 查找一个员工 不透漏细节
try
{
Byte[] byteImg = model.Photo;
Stream stream = new MemoryStream(byteImg);
System.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);//写入二进制流
Response.End();
}
catch
{
Response.End();
}
}
}
}

(2)、显示照片的页面调用ImgHelper .aspx
在页面加载的时候,给图片控件赋值如下:
复制代码 代码如下:

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

总体来说,一存一取,对于winform是很方便的,但是对于webform,我们需要稍微有一个转化的思路。如果有牛人写出像winform下那种直接绑定Image对象的控件更好了。上面代码测试通过,希望对你有帮助。
[!--infotagslink--]

相关文章

  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • C#查询SqlServer数据库并返回单个值的方法

    这篇文章主要介绍了C#查询SqlServer数据库并返回单个值的方法,涉及C#操作SQLServer数据库查询的相关技巧,需要的朋友可以参考下...2020-06-25
  • SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息

    SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 'WIN-8IVSNAQS8T7\Administrator' 的信息,错误代码 0x534。 [SQLSTATE 42000] (ConnIsLoginSysAdmin)...2021-07-15
  • SQL SERVER迁移之更换磁盘文件夹的完整步骤

    这篇文章主要给大家介绍了关于SQL SERVER迁移之更换磁盘文件夹的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • CentOS8安装SQLServer2019的过程

    这篇文章主要介绍了CentOS8安装SQLServer2019的步骤,本文通过命令实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • SqlServer 数据库 三大  范式

    本文将基于三大范式原则,结合具体的实例做简要分析,对SqlServer 数据库 三大 范式相关知识感兴趣的朋友一起看看吧...2020-07-11
  • sql server日志处理不当造成的隐患详解

    这篇文章主要给大家介绍了关于sql server日志处理不当造成的隐患的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
  • sqlserver添加sa用户和密码的实现

    这篇文章主要介绍了sqlserver添加sa用户和密码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-07
  • PHP在Linux下连接MSSQLServer的配置方法简述(一、Sybase库)

    如果需要在Linux下访问Microsoft SQL Server或Sybase数据库,则推荐下列软件包。 SybaseCommon http://download.sybase.com/pub/ase1192_linux/sybase-common-11.9....2016-11-25
  • c#操作sqlserver数据库的简单示例

    这篇文章主要介绍了c#操作sqlserver数据库的简单示例,需要的朋友可以参考下...2020-06-25
  • C# 启动 SQL Server 服务的实例

    下面小编就为大家分享一篇C# 启动 SQL Server 服务的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • sql server数据库中raiserror函数用法的详细介绍

    这篇文章主要介绍了sql server数据库中raiserror函数用法的详细介绍,raiserror用于抛出一个异常或错误,让这个错误可以被程序捕捉到。对此感兴趣的可以了解一下...2020-12-08
  • sqlserver中distinct的用法(不重复的记录)

    distinct这个关键字用来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。...2020-07-11
  • SqlServer 表单查询问题及解决方法

    这篇文章主要介绍了SqlServer 表单查询问题及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • sqlserver 批量数据替换助手V1.0版发布

    前段时间网站被挂马,数据库表中很多文本字段都被加上了一段js脚本。修复完程序漏洞之后便开始着手清理这些被注入的数据,其间参考了一些网上的方法,大都是写一个存储过程进行一个表一个表逐一清理。...2021-09-22
  • c++读取sqlserver示例分享

    这篇文章主要介绍了c++读取sqlserver的示例,需要的朋友可以参考下...2020-04-25
  • sqlserver 普通用户运行错误解决方法补充

    本方法作为Windows2003服务器安装及设置教程——MSSQL安全篇一(将MS SQL SERVER运行于普通用户下)的补充,成功解决了不能将sqlserver运行在普通用户的权限下的问题。...2016-01-27
  • win98 PWS环境下连接读取远程SQLServer

    from: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=4&txtCodeId=6518 Connect/Read Remote SQL server Using PWS in win 98 I had to t...2016-11-25
  • 在SQLSERVER2005中实现素数计算

    我将提出一个挑战,谁能用SQLSEERVER提出计算素数最好的方法, 我用了一个新的特点CTE和某些TSQL实现,但均不理想,前者(CTE)有限制,而后者(TSQL)产生一百万个素数用了7分种 你可...2016-11-25
  • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

    这篇文章主要介绍了C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息,结合实例形式总结分析了C#针对SQLServer数据库存储过程及参数信息的各种常见操作技巧,需要的朋友可以参考下...2020-06-25