你的位置:睿鑫网络 >> 编程 >> web开发 >> ASP.NET >> 详细内容 在线投稿

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

排行榜 收藏 打印 发给朋友 举报 来源: 网络   发布者:未知
热度16票  浏览71次 时间:2010年1月15日 10:55
睿鑫网络&Ur8g,L ^ O6q-@P

介绍睿鑫网络ySm(H9U8ML

睿鑫网络-]:U1B/{7~rZ;q

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

w8Ku;sAt[ m|0

!|3d m*xE-n~&U0在这篇文章中,我们将讨论怎样把图片存入到Sql2000当中。睿鑫网络QuQe/pF#gHb

ttr.?i] mQ0在这篇文章中我们可以学到以下几个方面的知识:

V~W@7n5o6B0 睿鑫网络'v9@+U DI0OR*P

1.插入图片的必要条件

hFv%d&M b0

CUj$H9`*\t02.使用流对象睿鑫网络`6qL[@

睿鑫网络&Mj%M^X

3.查找准备上传的图片的大小和类型睿鑫网络*J Ny.]Rsh

xqVi%apm04.怎么使用InputStream方法?睿鑫网络Q;F-|f8rv6xU

D-Az&qm3Jp6e0插入图片的必要条件

+zmm%H0TC,o0

/Vz3f B7~fz#D-v0在我们开始上传之前,有两件重要的事我们需要做:睿鑫网络f&dre4\~DS

睿鑫网络bt(N,UW1`4`9O#wJkg

#Form 标记的 enctype 属性应该设置成 enctype="multipart/form-data"睿鑫网络 \Yp8YK2fId

睿鑫网络a;Ynt(@6V"t*@o

# 需要一个表单来使用户选择他们要上传的文件,同时我们需要导入 System.IO名称空间来处理流对象睿鑫网络#d ??_'v

睿鑫网络Q%hi en2s

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

Q_/A"Ei~L0

oP4^pk)SD0# 需要至少含有一个图片类型的字段的表

h%g$u9e%M'c[0 睿鑫网络"GG"]:Kp

# 如果我们还有另外一个变字符类型的字段来存储图片类型,那样会更好一些。睿鑫网络L(R7b] L

)ul/V'`5l+k,]0现在,我们准备了一个Sql表(包含了一个image数据类型的字段),还有标记。当然我们还得准备Submit按钮,以便用户在选择了图片以后提交。在这个按钮的Onclick事件里,我们需要读取选取图片的内容,然后把它存入到表里。那我们先来看看这个Onclick事件。睿鑫网络pjB*}p Y

睿鑫网络\Y a6Za"~

提交按钮的Onclick事件的代码:

.^6Y$l*jEJk"S9T0 睿鑫网络2E,^i C q

Dim intImageSize As Int64睿鑫网络ra qz/x"K

!Dx8|[uA]P0Dim strImageType As String

W d)_n g/E3un e*M0 睿鑫网络v$H,Z:p-zr"x2Q

Dim ImageStream As Stream睿鑫网络R%]o-{4b)c)m[(^

睿鑫网络,qKU"BYJ'vb

' Gets the Size of the Image睿鑫网络(hQa)b(`4[m&A O"z

睿鑫网络fZC)\[/n?"{wXx

intImageSize = PersonImage.PostedFile.ContentLength

^Y'F1O!r0C+ELU^0

vUB%HIy/ZR0' Gets the Image Type

wdS:LS X1A:i-h0

,JJ/Bv#I.bR5z0strImageType = PersonImage.PostedFile.ContentType睿鑫网络&I&Zo*W}

睿鑫网络 Kj7N)D$_

' Reads the Image睿鑫网络%X[~ Em*j

0{#y?c}!H0ImageStream = PersonImage.PostedFile.InputStream

d)G2T3B!q'ES0

#d~y/D*{ i0Dim ImageContent(intImageSize) As Byte

,g C0lb;D0]&l0

4j9} \ ][-g l/[$_ Dt0Dim intStatus As Integer

i VQgg/M5t2{.n]0

/P+FTm3x D O0intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

5a&F,Z-h H:[dA0 睿鑫网络9Z\J#\ lB9@

' Create Instance of Connection and Command Object睿鑫网络7}(wh?;U(_ P

睿鑫网络IO:gVY

Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))睿鑫网络LSYh U-M

f9["R(P0id*[&k(y0Dim myCommand As New SqlCommand("sp_person_isp", myConnection)

]C;h,`H(L0 睿鑫网络0u6pm.Z~.{

' Mark the Command as a SPROC

NlVX|"H7em#T/F YE0 睿鑫网络o9ym0K yz6t

myCommand.CommandType = CommandType.StoredProcedure

6_ ST"fs vhf T8mI7k0 睿鑫网络"e2TM%t5@3WS

' Add Parameters to SPROC

dwl1C#U$x]E0 睿鑫网络 b-R`*?F[#Q;l

Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)

El4H\-UV0

faqq9L1E$K t0prmPersonImage.Value = ImageContent睿鑫网络u2_P2G*eL

C4uFGN'oL1J0myCommand.Parameters.Add(prmPersonImage)睿鑫网络|1vnf N%Nc#u

睿鑫网络5N;n5^5P)g9v HB

Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)睿鑫网络wG]Ba%o:m%sWM

!|a4}1]$y$i0prmPersonImageType.Value = strImageType

f3MR7w ?f"E0 睿鑫网络4C%Ua j@9[+{/} [X3u

myCommand.Parameters.Add(prmPersonImageType)

V4L6]6C-^"N P J0

7I$u:J!{7Ah c(ai4Z{0Try

3X9H7d9]t9lY|0 睿鑫网络Wz+sK!l {0qS%fb

myConnection.Open()睿鑫网络1U3_Ir C

睿鑫网络qy[6qpw,Z!I

myCommand.ExecuteNonQuery()睿鑫网络q1Kl&x P3T i

睿鑫网络 G%qg zM_*N0\.H&O

myConnection.Close()睿鑫网络g4Lm4gKjL

睿鑫网络{4]T-R.h0h8O.Q-B

Response.Write("New person successfully added!")睿鑫网络8iyC9K UFAX2H%yoY

g5f'Yf_ WPuc0Catch SQLexc As SqlException

^\4w!tY0 睿鑫网络YNa)n(Qo

Response.Write("Insert Failed.Error Details are: " & SQLexc.ToString())睿鑫网络o Q6d5\#k

睿鑫网络*bp`"L(e6Nn

End Try

AJt;q,|\:I6_0 睿鑫网络*ZaCT^3i0H9A

这是怎么工作的呢?睿鑫网络)Er%j1C(p L,}

睿鑫网络 M;_#{C1g-DU,r

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

QWT2XR_7X^0 睿鑫网络A6o"BbuN6gk

intImageSize = PersonImage.PostedFile.ContentLength睿鑫网络`D~},}Z g%L

睿鑫网络2DSV-J$DK7yM

然后返回图片的类型使用ContenType属性。最后,也是最重要的事就是取得Image Stream,这可以用以下代码实现:睿鑫网络"pN5R'\x"Jee&H

`9V%PH#p1z0ImageStream = PersonImage.PostedFile.InputStream

+p8{ol}-W,{8D0 睿鑫网络"e$SB!Y\M/o-c

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

J h8oC3A;s0

7OC uPWS4`0buffer睿鑫网络0G4U/Kd"_:[`T

{3x#n4i auw0字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换。

6W&k9r+{ { P0

+y QE\~0offset睿鑫网络J6ji2BS!V0b0wd \

睿鑫网络nYT/o C!f/w I6c`

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

GUz7[ J`3DA~1R0

e B8g|X~ Q+u0count

j%uecR@%]T7t#Q`1|0

2T.q8?*f'Aj0要从当前流中最多读取的字节数。

@RSH:dL0 睿鑫网络;v5X(qr6pX&X Lgl

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

G,|us|+]V0q/qj w0

nC-[;Z3E}7YP0intStatus = ImageStream.Read(ImageContent, 0, intImageSize)睿鑫网络9J*Jd\S:?&G

睿鑫网络@#RN%l2y By

.睿鑫网络 s j O3d5b M^R

睿鑫网络ut3y}:@"J|8H

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

!`&tTLjv~~j I)h0 睿鑫网络1uShb+l#?6h/c.?4w

结论睿鑫网络r;I4R9wbe8yUcQ

O9n!GL&N| ~0我们已经讨论了如何把图片存入到Sql Server,那么我们如何从SqlServer中读取图片呢?可以参看我的另一篇文章:在Asp.Net中从SqlServer中检索图片。

nO7?J~4t0
上一篇 下一篇

网络资源