ASP.Net 图片存入数据库的实现代码

 更新时间:2008年11月26日 12:21:10   作者:  
在很多时候,我们有这样的需求:把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。
在这篇文章中我们可以学到以下几个方面的知识:
1. 插入图片的必要条件
2. 使用流对象
3. 查找准备上传的图片的大小和类型
4.怎么使用InputStream方法?
插入图片的必要条件
在我们开始上传之前,有两件重要的事我们需要做:
#Form 标记的 enctype 属性应该设置成 enctype="multipart/form-data"
# 需要一个<input type=file>表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象
把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。
# 需要至少含有一个图片类型的字段的表
# 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。
现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有<input type=file>标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的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属性。最后,也是最重要的事就是取得Image Stream,这可以用以下代码实现:
ImageStream = PersonImage.PostedFile.InputStream
我们需要一个字节型数组来存储image 内容。读取整个图片可以使用Stream对象的Read方法来实现。Read(in byte[] buffer,int offset,int count)方法有三个参数。【关于Read方法的详细可以参看.Net FrameWorkSDK】他们是:
buffer
字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换。
offset
buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。
count
要从当前流中最多读取的字节数。
这个Read方法用以下代码实现:
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
现在,我们已经读取了整个图片的内容,下一步,我们要把这些内容存入到sql 表。我们将使用存储过程来完成插入图片类型和图片内容到sql 表。如果你浏览了上面的代码,你将会发现我们使用了sqldbtype.image的数据类型(datatype)。Ok了,完成了这些,我们也就成功的把图片存入到SqlServer中了。下面是我们编写的aspx页面。
图片存入数据库结论
我们已经讨论了如何把图片存入到Sql Server,那么我们如何从SqlServer中读取图片呢?可以参看我的另一篇文章:在Asp.Net中从SqlServer中检索图片。

相关文章

  • .NET8中gRPC的使用方法详解

    .NET8中gRPC的使用方法详解

    gRPC是一种高性能、开源的远程过程调用(RPC)框架,基于 HTTP/2 协议,支持双向流、头部压缩等特性,下面我们就来看看.NET8下gRPC的具体使用吧
    2025-03-03
  • Asp.net 基于Cookie简易的权限判断

    Asp.net 基于Cookie简易的权限判断

    基于Cookie简易的权限判断代码,需要的朋友可以参考下。
    2010-01-01
  • python安装pillow的三种方法

    python安装pillow的三种方法

    本文python安装pillow的三种方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • asp.net音频转换之.amr转.mp3(利用七牛转换法)

    asp.net音频转换之.amr转.mp3(利用七牛转换法)

    相信很多人都遇到amr格式的音频文件不能直接在网页播放的问题,有人使用QuickTime插件的辅助,下面这篇文章主要给大家介绍了asp.net音频转换之利用七牛转换法将.amr格式转.mp3格式,需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • .NET 6开发TodoList应用之实现PUT请求

    .NET 6开发TodoList应用之实现PUT请求

    PUT请求本身其实可说的并不多,过程也和创建基本类似。这篇文章主要为大家介绍了.NET6实现PUT请求的示例详解,感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12
  • 服务器安全狗导致ASP.NET网站运行出错的一个案例

    服务器安全狗导致ASP.NET网站运行出错的一个案例

    这篇文章主要介绍了服务器安全狗导致ASP.NET网站运行出错的一个案例,最后一并给出了解决方法,需要的朋友可以参考下
    2014-08-08
  • 合并两个DataSet的数据内容的方法

    合并两个DataSet的数据内容的方法

    合并两个DataSet的数据内容的方法,需要的朋友可以参考一下
    2013-03-03
  • VS2015下简单使用EF框架的方法

    VS2015下简单使用EF框架的方法

    这篇文章主要为大家详细介绍了VS2015下简单使用EF框架的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • asp.net 无刷新附件上传实现方法

    asp.net 无刷新附件上传实现方法

    一直以来附件上传都是个很郁闷的问题,刚开始是利用js添加input file 然后一起提交来实现多文件上传,在使用163邮箱的时候很是羡慕它的附件上传部分(选择完文件就提交,可以多个文件一起上传,而且还可以获取上传进度),这时就很想自己也写个那样的东西出来。
    2010-01-01
  • ASP.NET MVC实现区域路由

    ASP.NET MVC实现区域路由

    这篇文章介绍了ASP.NET MVC实现区域路由的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论