ASP.NET中让图片以二进制的形式存储在数据库中

今早有个网友问到我这问题,以前我都是直接在数据库中存文件名的,还没有试过存储整张图片到数据库中,上网搜索了一下,自己又测试了一番,代码如下:
建立保存图片的表的SQL语句:

Sql代码  

  1. USE [niunantest]
  2. GO
  3. /****** 对象:  Table [dbo].[picdata]    脚本日期: 03/30/2010 14:51:58 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE TABLE [dbo].[picdata](
  9. [id] [int] IDENTITY(1,1) NOT NULL,
  10. [content] [image] NULL,
  11. [createdate] [datetime] NOT NULL CONSTRAINT [DF_picdata_createdate]  DEFAULT (getdate()),
  12. CONSTRAINT [PK_picdata] PRIMARY KEY CLUSTERED
  13. (
  14. [id] ASC
  15. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  16. ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

下面是保存图片到数据库中的代码片段:

C#代码  

  1. int len = fu.PostedFile.ContentLength;  // 图片大小
  2. byte[] pic = new byte[len];  // 创建一个字节数组,大小为图片的大小,数据库中就存储这个东西
  3. fu.PostedFile.InputStream.Read(pic, 0, len); // 把上传控件中的文件用二进制读取存到pic字节数组中
  4. //   插入图片到数据库中
  5. SqlConnection connection = new
  6. SqlConnection(@"server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456");
  7. try
  8. {
  9. connection.Open();
  10. SqlCommand cmd = new SqlCommand("insert   into   picdata   "
  11. + "([content])   values   (@pic)", connection);
  12. cmd.Parameters.Add("@pic", pic);
  13. cmd.ExecuteNonQuery();
  14. Label1.Text = "图片插入数据库成功!";
  15. Image1.ImageUrl = "getpic.ashx?t=" + DateTime.Now.Ticks;  // 显示刚刚插入数据库的图片
  16. }
  17. finally
  18. {
  19. connection.Close();
  20. }

下面是从数据库中取出图片的代码片段:

C#代码  

  1. MemoryStream stream = new MemoryStream();
  2. SqlConnection connection = new
  3. SqlConnection(@"server=.\sqlexpress;database=niunantest;uid=sa;pwd=123456");
  4. try
  5. {
  6. connection.Open();
  7. SqlCommand command = new
  8. SqlCommand("select top 1  [content]   from   picdata order by id desc", connection);
  9. byte[] image = (byte[])command.ExecuteScalar();
  10. stream.Write(image, 0, image.Length);
  11. Bitmap bitmap = new Bitmap(stream);
  12. context.Response.ContentType = "image/jpeg";
  13. bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  14. }
  15. finally
  16. {
  17. connection.Close();
  18. stream.Close();
  19. }

其实也就是通过流把图片搞成字节数组再存到数据库中,然后再从数据库中读取字节数组出来,再通过字节数组创建流,再通过流把图像输出出来,发现你存到数据库中的是gif图像的话再取出来是可以把他转为jpg的图像的,因为在取出图像的时候我们设置他的ContentType是image/jpeg了。

源码下载:http://niunan.net/download/picsave2db.7z

ASP.NET中让图片以二进制的形式存储在数据库中,布布扣,bubuko.com

时间: 2024-10-24 19:33:39

ASP.NET中让图片以二进制的形式存储在数据库中的相关文章

将文件以二进制的形式保存到数据库中

主要应用HttpPostedFile类的InputStream属性.Stream类的read方法和Byte数据类型.首先获取上传数据文件的名称.大小和类型,建立一个访问客户端上传文件的对象HttpPostedFile和一个数据流对象Stream,然后使用数据流Stream对象将上传文件以二进制形式的数据写入Byte类型的数组中,最后将二进制数据保存的数据库中. 代码:try        {            if (this.FileUpload1.PostedFile.FileName

将图片以二进制的方式保存在数据库中,并显示图片

http://www.aspnettutorials.com/tutorials/database/store-img-bins-asp4-cs/ http://stackoverflow.com/questions/18998763/how-to-retrieve-binary-image-from-database-using-c-sharp-in-asp-net 1. 创建一个数据表 CREATE TABLE [dbo].[SaveImageByBinary] ( [Id] INT NOT

python django 前端上传图片,后端以二进制流形式保存到数据库

models.py pic = models.BinaryField() html  ajax 上传请求 $('#jbwwtj').click(function(){ var formdata = new FormData(); formdata.append("wwid",$("#jbwwid").val()); formdata.append("jbidtp",$('input[type=radio][name=jbidtp]:checked

如何使用 JDBC 调用存储在数据库中的函数或存储过程

JDBC调用存储过程步骤:1 通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例.在使用Connection对象的prepareCall()方法时,需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<a

问卷过程_将编辑好的问卷(存储在数据库中)显示在浏览器中

首先要了解数据的设计,也就是数据室怎么存储在数据库中的. 先来看一个最简单的问卷的构成吧 可以看到大概的结构是:『标题:标题内容标题说明.题目:题目编号,题目内容.选项:选项类型,选项编号,选项内容』.提交:提交按钮.其中『』内的元素就是需要存储到数据库中的. 可以想一下:一张表示是否可以存储一张问卷呢?这应该是可以的但是一个表不应该只能存储一张问卷吧,要不然太浪费资源了. 数据库的设计应该是怎样的呢: 首先:整体的问卷基本信息要有:问卷的编号(我们通过链接把我们的问卷发给别人来填写的话,要唯一

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

java中list集合的内容,如何使用像数据库中group by形式那样排序

java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    money(名称)  (金额) 来源A   100来源B   200来源C   300来源B   6600来源A   99800<数据1> 最后想实现的是:如果假设这些数据在数据库中,那么通过 select name,sum(money) from Table group by name 该语句得到的Li

Kettle_使用资源库功能把ktr元数据统一存储到数据库中

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46117065 [目标] 利用kettle中的资源库功能,把ktr文件统一存储到数据库中,方便本地进行版本管理 ktr:使用kettle编辑的转换,被称为ktr: 转换:添加功能模块,实现ETL的项目称为转换. 一路确定后,点击ok完成资源库的创建,如下: 创建完成后,先进

如何在GridControl中显示图片列?控件DevExpress.XtraGrid.GridControl中显示图片列。

GridControl一列的ColumnEdit属性中选择PictureEdit,一个RepositoryItemPictureEdit添加完成.列的FieldName设置为Image列名,如img. GridControl绑定的数据,不管是DataTable.List或者其他源,添加一个列,列名为img. 以DataTable为例: Image xx=Image.FromFile("xxx"),yy=Image.FromFile("yyy"); dt.Column