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

ASP.NET中图片的数据库存储方案 SQL Server 通过VARBINARYBINARY和IMAGE等数据类型支持二进制数据的存储。其中,是存储大型二进制对象的常用选择,它可以存储最大为2GB的数据。使用可以这样创建表:此表设计允许存储文档的元数据以及文档内容本身。数据类型存储的是二进制数据,对于存储图片、视频或其他大型文件非常有用。创建表时,为二进制字段设置合适的数据类型和长度是至关重要的。这将直接影响数据的存储效率和检索性能。除了数据类型外,还可以为字段设置默认值、标识属性等其他约束。 阅读详情

有一个员工表Employee,需要保存员工照片(Photo)到数据库(sql server)上。员工照片对应的字段是varbinary(max),也就是要存成二进制文件类型(这和以前讨巧地存图片文件路径就不相同了),默认可以为空。

思路: 

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>  www.jbxue.com
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 
{ 
//最后删掉该图片 www.jbxue.com
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 
{ // www.jbxue.com
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对象的控件更好了。上面代码测试通过,希望对你有帮助。
二进制文件转换为图片,可以放到只能存图片空间里,原创 二进制文件转换为图片,可以放到空间里。原创,把图片转换为点阵图形式(全是马赛克) 须支持.net(C#编的) 注意: 不可以改变图片大小,不可以修改图片,不可以转换图片格式,否则反转换出的文件的字节会有偏差 文件不能太大,最大几MB,要不然会OutOfMemory,实在不行用RAR分卷压,在转多张图片 操作方法(转换为图片): 1.在文件那栏点选取,选择要转换到图片的文件 2.在图片那栏点选取,选择要转换到的地方 3.按“转换到位图” 操作方法(转换为文件): 1.在文件那栏点选取,选择要往回转换到哪里(扩展名须自己写,在图片上) 2.在图片那栏点选取,选择要图片 3.按“转换到文件” 立即下载

相关推荐

C# 二进制数据、图片存入、读出 sql server 数据库

使用的表的建表 sql CREATE TABLE [image_table] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [Pic] [image] NULL , CONSTRAINT [PK_image_table] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO 提供完整源码下载

c# SqlServer字段保存二进制文件

1.Sqlserver数据库中保存二进制的字段[varbinary](max),建一个表 CREATE TABLE [dbo].[FileDemoModel]( [ID] [int] NULL, [demoFileName] [varchar](100) NULL, [demoFile] [varbinary](max) NULL ) 2.创建一个测试Demo ...

weixin_40715466的博客 2813

关于【中孚计算机终端保密检查系统】的卸载

卸载中孚计算机终端保密检查系统

码农之路,向死而生 4万+

c#图片二进制互转

///二进制转图片 MemoryStream ms = new MemoryStream(byte[] 二进制数据); /// 图片转二进制 FileStream fs = new FileStream(path, FileMode.Open); BinaryReader br = new BinaryReader(fs); byImage = br.ReadBytes(Convert.ToInt32(br.BaseStream.Length)); fs.Close(); br.Close(); ///数据

weixin_43941291的博客 1789

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4864

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2133

SQLserver C#将图片以二进制方式存储到数据库,再从数据库读出图片

一 存储到数据库1、建立数据表UserPhoto userID为varchar(50)    设置为标识列unique不能重复   alter table UserPhoto add  unique(UserID) photo为image2、写一个类,主要有三个方法(1)连接数据库的类ConnectionOpen()(2)判断图片类型转换byte[]数组ImageToBytes(Image ima...

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 3966

RLHF 家族的奇巧魔改:On Policy 与 Off Policy 路线大PK

无论是 On Policy 还是 Off Policy,RLHF 家族的“魔改”之路都充满了奇思妙想。相信随着研究的深入,RLHF 技术将会在 Alignment 领域发挥越来越重要的作用。

步子哥的博客 2081

图片和二进制流转换为Image对象

将图片转换为image对象: Image  img = Image.FromFile(@“e:/Images/moren.jpg");   将varbinary二进制流转换为图片对象: MemoryStream ms = null; Image img = null; ms = new MemoryStream((Byte[])dt.Rows[i]["Pic_2D"]); //Mem

lingling_jy的专栏 3013

时间序列—显著相关性和滞后性分析_python

本文讲述了两个时间序列(信号)的相关性分析,可以利用相关性分析进行特征筛选。此外本文还讲了怎么判断时间序列的滞后性的方法。

qq_34229228的博客 2万+

安装Openclaw[本地自动化AI助手]至windows【WSL2模式】系统 Openclaw for Windows

摘要:OpenClaw最佳兼容OpenAI系列模型,推荐使用ChatGPT API(需Auth鉴权),避免K*mi等模型导致的信用卡风险。Windows系统需满足WSL2支持条件(Win11或Win10 1903+版本)。安装需导入自签名根证书或跳过浏览器安全警告,通过离线包部署WSL发行版。使用时通过clawtoken命令获取网关认证令牌,并在浏览器完成设备配对。提供代购ChatGPT Plus账号服务(¥140/月),详细操作指南需加微信群获取文件。(150字)

qq_27246521的博客 456

asp.net(c#)实现从sql server存取二进制图片

有一个员工表Employee,需要保存员工照片(Photo)到数据库(sql server)上。员工照片对应的字段是varbinary(max),也就是要存成二进制文件类型(这和以前讨巧地存图片文件路径就不相同了),默认可以为空。下面说说主要实现思路:1、存取图片(1)、将图片文件转换为二进制并直接存进sql server Code     //UploadHelper.cs     /// &...

weixin_34357962的博客 253

uniapp - H5网页uni.getLocation报错getLocation:fail Geolocation permission denied.Get ipLocation failed.

uni.getLocation getLocation:fail Geolocation permission denied.Get ipLocation failed.,uni.getLocation定位失败,uni-app getLocation()无法获取定位,一直fail()uniapp移动端h5网页,uniApp微信内置浏览器定位失败,如何解决这个问题,uniapp h5 uni.getLocation获取位置失败怎么办,UNI-APP获取当前位置,uni.getLocation定位失败,unia

🏆 前端领域优质创作者 4241

ASP.NET--图片上传通过二进制保存到数据库

ASP.NET–图片上传通过二进制保存到数据库 开发工具:Visual Studio 2015、SQL Server 2014 Management Studio 关键技术:C# MVC 作者:刘东标 撰写时间:2019年1月18日 实现效果: 、、、、、、、、、、、、、html代码、、、、、、 @*选择文件*@ &lt;div cl...

weixin_44538423的博客 1569

【华为OD技术面-手撕算法代码真题】- 最长公共前缀

🌟 强烈推荐:华为OD技术面试手撕算法代码真题 🌟大家好!今天我给大家推荐一份备受赞誉的华为OD技术面试手撕算法代码真题。所有题目均为华为od实际面试过程中出现的算法代码真题。

算法大师! 4884

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

c# mysql 二进制图片_C# 二进制存储图片到mssql(一)

今天刚学如何在mssql数据库中存储图片,决定留下笔记,以免后忘。SQL Server的联机丛书提供三种二进制数据类型的使用条件说明:1.当表列的所有输入数据大小为固定值(且长度小于8000字节)时,使用标准二进制Binary数据类型;2.当表列的输入数据长度有很大差别(且长度均小于8000字节)时,使用varBinary数据类型;3.当表列输入数据长度超过8000字节时,使用varBinary(...

weixin_40009472的博客 222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在ASP.NET中存取图片到数据库的示例

首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageContentType Column为图象文件类型记录字段,ImageDescription Column为储蓄图象文件说明字段,ImageSize Column为储存图象文件长度字段,结构如下: CREATE TABLE [dbo].[ImageStore] (...

95

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ASP.NET如何存取SQL Server数据库图片

SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。  1、建立一个表:  在SQL SERVER中建立这样结构的一个表: 列名 类型 ...

weixin_34240520的博客 74

ASP.NET存取SQL Server数据库图片

ASP.NET存取SQL Server数据库图片SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。在这篇文章中我们要看到如何在SQL Server中存储和读取图片。1、建立一个表:在SQL SERVER中建立这样结构的一个表:列名 类型 目的 ID Integer 主键ID IMGTITL

831

【C#】 ASP.NET中存取图片到数据库的示例(C#)

//开发环境:Window 2003、SQLServer2000、.Net 2.0 //开发语言:C#、ASP.Net //简介:图片预览,数据库中图片存储及读取 //作者:wayne-ivan //Email:wayne-ivan@163.com /* 首先在SQL Server中建立一个图片存储的数库表,ImageData Column为图象二进制数据储存字段,ImageC...

weixin_30820077的博客 159

C# 二进制存储图片到mssql(一)

今天刚学如何在mssql数据库中存储图片,决定留下笔记,以免后忘。 SQL Server的联机丛书提供三种二进制数据类型的使用条件说明: 1.当表列的所有输入数据大小为固定值(且长度小于8000字节)时,使用标准二进制Binary数据类型; 2.当表列的输入数据长度有很大差别(且长度均小于8000字节)时,使用varBinary数据类型; 3.当表列输入数据长度超过8000字节时...

weixin_30542079的博客 195
上一篇: C#操作图片读取和存储SQLserver
下一篇: 三种找回 linux root密码的方法
my_baby_2009
博客等级 码龄14年 31粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值