在ASP.NET中把图片保存到SQL SERVER数据库 comy(翻译)

转载 2004年07月01日 09:36:00
CSDN - 文档中心 - .NET    
标题     在ASP.NET中把图片保存到SQL SERVER数据库    comy(翻译)
关键字     asp.net 图片 sql server 数据库 image 上载
出处     http://http://aspalliance.com/das/insertimage.aspx

ASP.NET中把图片保存到SQL SERVER数据库

翻译:吕绍伟

介绍

在很多情况下,我们需要把图片保存到数据库中。在某些应用程序中,存在一些敏感信息不能被存储到文件系统中,因为存储在文件系统上的任何图片都很容易被用户非法获得。

本文将讨论在ASP.NET中怎样把图片保存到SQL SERVER数据库中。

在本文中我们将了解到以下几方面的内容:

l         上载图片文件的要求

l         使用Strem对象

l         获得上载图片大小和类型

l         如何使用InputStream方法?

上载图片文件的要求

在开始上载前我们需要作两件重要的事情

#Form标记的enctype属性需要被设置为如下形式:

enctype="multipart/form-data" <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#提供一个让用户选择图片文件的Html控件:

<input type=file>

#还要引用System.IO命名空间来处理Strem对象

上述的三项都要应用到aspx页中。在SQL SERVER中还有以下的一些要求:

#一个至少有一个字段类型为Image的表

#另外有一个用来存储图片类型的Varchar类型的字段就更好了

那么,我们有了一个有Image字段类型的数据表和一个<input type=file>(HTML文件控件)。我们还需要一个提交按钮,当用户选择好图片后可以点击它。在按钮的OnClick事件中我们要获得图片文件的内容并最终把它插入到数据表中。让我们来看看按钮的OnClick事件,它读取图片并把图片插入到数据表中。

提交按钮的OnClick事件代码

 
  Dim intImageSize As Int64
    Dim strImageType As String
    Dim ImageStream As Stream

    ' Gets the Size of the Image
    intImageSize = PersonImage.PostedFile.ContentLength

    ' Gets the Image Type
    strImageType = PersonImage.PostedFile.ContentType

    ' Reads the Image
    ImageStream = PersonImage.PostedFile.InputStream

    Dim ImageContent(intImageSize) As Byte
    Dim intStatus As Integer
    intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

    ' Create Instance of Connection and Command Object
    Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
    Dim myCommand As New SqlCommand("sp_person_isp", myConnection)

    ' Mark the Command as a SPROC
    myCommand.CommandType = CommandType.StoredProcedure

    ' Add Parameters to SPROC
    Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)
    prmPersonImage.Value = ImageContent
    myCommand.Parameters.Add(prmPersonImage)

    Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
    prmPersonImageType.Value = strImageType
    myCommand.Parameters.Add(prmPersonImageType)

    Try
        myConnection.Open()
        myCommand.ExecuteNonQuery()
        myConnection.Close()
        Response.Write("New person successfully added!")
    Catch SQLexc As SqlException
        Response.Write("Insert Failed. Error Details are: " & SQLexc.ToString())
    End Try

 

它是如何工作的?

对象PersonImage HTMLInputFile 控件。首先我们要获得被插入图片的大小,通过如下方法实现:

intImageSize = PersonImage.PostedFile.ContentLength

接着要通过ContenType属性获得图片类型。最后最重要的是要获得图片文件流,通过如下方法实现:

ImageStream = PersonImage.PostedFile.InputStream

我们有一个byte数组ImageContent,准备用来保存图片内容。整个图片通过Stream对象的Read方法读取,这个方法有三个参数,即:

#被复制的图片内容的目标位置

#读的开始位置

#需要被读的子节数

读声明如下:

intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

现在,我们读取了整个图片内容。接着我们需要把图片内容插入SQL数据表中,我们将用用一个存储过程把图片类型和图片插入SQL数据表。如果你看过上面的代码清单,你就知道我们把数据类型设置为SqlDbType.Image.就这样,我们成功地把图片保存到了SQL SERVER数据库。

例子的输出样例

例子的输出样例

图:将图片保存到sql server 数据库

测试下面的代码

代码下载

点击这里下载ASPX页

点击这里下载存储过程

总结

这样,我们完成了怎样把图片保存到数据库的讨论。我们也准备好了使用上面的下载部分提供的例子和存储过程。如果你想知道怎样从SQL SERVER中读取图片,请参阅我的这篇文章Retrieving Images from SqlServer in ASP .NET

译者注:由于受到HTTP传输协议的限制,在不同的环境下能够上载文件的大小不一。对于要上传大文件的WEB应用程序来说,这并不是一个完美的解决方案,只是为我们提供了一种相对较好的方法。我曾经用这种方法在局域网中成功上载30M的文件,但是在系统性能较低的另外一个本机系统中,最多只能上载5M的数据。另外需要读者注意的是,上载大文件的时候要适当修改machine.config和web.config文件,只要你打开这些文件就可以知道怎样适当的修改。初次翻译,还望大家多多指正。

在ASP.NET中把图片保存到SQL SERVER数据库

翻译:吕绍伟(转载)介绍在很多情况下,我们需要把图片保存到数据库中。在某些应用程序中,存在一些敏感信息不能被存储到文件系统中,因为存储在文件系统上的任何图片都很容易被用户非法获得。本文将讨论在ASP....
  • vzxq
  • vzxq
  • 2004年09月14日 10:17
  • 1099

怎么样把图片存放到SQL SERVER 数据库中?

存入:  .首先将图片文件以二进制方式读出存入一个变量。  $imgname = "图片文件名";$fp = fopen($imgname,"rb");$bit = fread($fp,filesiz...
  • jxyuhua
  • jxyuhua
  • 2004年08月30日 10:31
  • 1123

Winform下如何上传图片并显示出来。同时保存到数据库

通常,我们在开发软件或者网站是否,通常有时候需要添加图片,我们怎么做呢,直接贴例子。 前提是添加openFileDialog控件哈   #region 定义公共的类对象及变量         Sq...
  • u010276845
  • u010276845
  • 2014年02月20日 17:22
  • 1015

MFC存储图片到SQL Server数据库

第一步:建立数据库表,比如:id char,pic image。第二步:建立MFC单文档应用程序,再添加类CMyRecordset,基类选择CRecordset,导入数据库的刚建立的表。第三步:在do...
  • zhaoweihornets
  • zhaoweihornets
  • 2010年07月08日 00:31
  • 1483

Asp.net 上传图片,保存路径到数据库

本方法相对独立,直接放到页面中,调用即可,返回上传后图片的路径,图片名称已经修改为纯数字+后缀名 /// /// 上传文件,返回保存的路径/文件名 /// ///...
  • moniteryao
  • moniteryao
  • 2015年01月22日 15:43
  • 1496

PictureBox中的Image对象转存到数据库

这个是在百度知道上回答问题时看到的,一时没有做出来,看了一些资料才弄清楚的。 主要有两个点: 1.对流的操作不熟悉,不知道图片Image对象是可以”保存“到MemoryStream中的; ima...
  • frombegintoend
  • frombegintoend
  • 2012年06月30日 03:10
  • 4036

Delphi SQL数据库存取图片(利用流)

1、存图片到数据库  var    PicStream: TMemoryStream;  if imgBugPic.Picture.Graphic   begin     PicS...
  • my98800
  • my98800
  • 2017年03月27日 08:25
  • 343

C#中使用FileUpload上传图片到SQL数据库中以image类型存储并使用Image控件显示注意事项

当我们需要以数据流存储图片到数据库中(而不是文件路径),需要考虑很多因素,不同的环境决定了采取不同方法。 1.将图片存入数据库。首先,当我们决定使用FileUpload上传图片,需要考虑,FileU...
  • wuruiaoxue
  • wuruiaoxue
  • 2015年08月28日 03:07
  • 3293

SQLServer保存ASP.NET Session状态

SQLServer保存ASP.NET Session状态   一、在SQL Server中安装必要数据库表、存储过程等      若要使用 SQL Server,首先在将存储会话状态的 SQL Ser...
  • ikmb
  • ikmb
  • 2008年03月02日 11:52
  • 1466

asp.net上传的图片保存到文件夹下,并且生成缩略图

代码如下: /// /// 图片存储到本地文件夹 /// /// 默认的文件夹路径 /// //...
  • esunshine1985
  • esunshine1985
  • 2014年04月17日 11:20
  • 410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP.NET中把图片保存到SQL SERVER数据库 comy(翻译)
举报原因:
原因补充:

(最多只允许输入30个字)