asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

如何在ASP.Net 中把图片存入数据库


发布日期:2024年05月08日
 
如何在ASP.Net 中把图片存入数据库
介绍

可能有很多的时候我们急需把图片存入到数据库当中在一些应用程序中我们可能有一些敏感的资料由于存储在文件系统(file system)中的东西将很容易被某些用户盗取所以这些数据不能存放在文件系统中

在这篇文章中我们将讨论怎样把图片存入到Sql当中

在这篇文章中我们可以学到以下几个方面的知识

插入图片的必要条件

使用流对象

查找准备上传的图片的大小和类型

.怎么使用InputStream方法?

在我们开始上传之前有两件重要的事我们需要做

(1)Form 标记的 enctype 属性应该设置成 enctype=multipart/formdata

(2) 需要一个<input type=file>表单来使用户选择他们要上传的文件同时我们需要导入 SystemIO名称空间来处理流对象

把以上三点应用到aspx页面同时我们需要对SqlServer做以下的准备

(1)需要至少含有一个图片类型的字段的表

(2)如果我们还有另外一个变字符类型的字段来存储图片类型那样会更好一些

现在我们准备了一个Sql表(包含了一个image数据类型的字段)还有<input type=file>标记当然我们还得准备Submit按钮以便用户在选择了图片以后提交在这个按钮的Onclick事件里我们需要读取选取图片的内容然后把它存入到表里那我们先来看看这个Onclick事件

提交按钮的Onclick事件的代码

Dim intImageSize As Int

Dim strImageType As String

Dim ImageStream As Stream

Gets the Size of the Image

intImageSize = PersonImagePostedFileContentLength

Gets the Image Type

strImageType = PersonImagePostedFileContentType

Reads the Image

ImageStream = PersonImagePostedFileInputStream

Dim ImageContent(intImageSize) As Byte

Dim intStatus As Integer

intStatus = ImageStreamRead(ImageContent intImageSize)

Create Instance of Connection and Command Object

Dim myConnection As New SqlConnection(ConfigurationSettingsAppSettings(ConnectionString))

Dim myCommand As New SqlCommand(sp_person_isp myConnection)

Mark the Command as a SPROC

myCommandCommandType = CommandTypeStoredProcedure

Add Parameters to SPROC

Dim prmPersonImage As New SqlParameter(@PersonImage SqlDbTypeImage)

prmPersonImageValue = ImageContent

myCommandParametersAdd(prmPersonImage)

Dim prmPersonImageType As New SqlParameter(@PersonImageType SqlDbTypeVarChar )

prmPersonImageTypeValue = strImageType

myCommandParametersAdd(prmPersonImageType)

Try

myConnectionOpen()

myCommandExecuteNonQuery()

myConnectionClose()

ResponseWrite(New person successfully added!)

Catch SQLexc As SqlException

ResponseWrite(Insert Failed Error Details are: & SQLexcToString())

End Try

这是怎么工作的呢?

PersonImage是HTMLInputFile控件的对象首先需要获得图片的大小可以使用下面的代码实现

intImageSize = PersonImagePostedFileContentLength

然后返回图片的类型使用ContenType属性最后也是最重要的事就是取得Image Stream这可以用以下代码实现

ImageStream = PersonImagePostedFileInputStream

我们需要一个字节型数组来存储image 内容读取整个图片可以使用Stream对象的Read方法来实现Read(in byte[] bufferint offsetint count)方法有三个参数【关于Read方法的详细内容可以参看Net FrameWorkSDK】 他们是

buffer字节数组此方法返回时该缓沖区包含指定的字符数组该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换

offsetbuffer 中的从零开始的字节偏移量从此处开始存储从当前流中读取的数据

count要从当前流中最多读取的字节数

这个Read方法用以下代码实现

intStatus = ImageStreamRead(ImageContent intImageSize)

现在我们已经读取了整个图片的内容下一步我们要把这些内容存入到sql 表我们将使用存储过程来完成插入图片类型和图片内容到sql 表如果你浏览了上面的代码你将会发现我们使用了sqldbtypeimage的数据类型(datatype)Ok了完成了这些我们也就成功的把图片存入到SqlServer中了下面是我们编写的aspx页面

结论

我们已经讨论了如何把图片存入到Sql Server那么我们如何从SqlServer中读取图片呢?可以参看我的另一篇文章在AspNet中从SqlServer中检索图片

               

上一篇:ASP.NET入门教程 9.6 泛型

下一篇:在ASP.net 中从sqlserver检索(retrieve)图片