|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可怜的程序员,还是逃不出移植的命运!在这篇文章中我们能够学到以下几个方面的常识:
1.拔出图片的需要前提
2.利用流工具
3.查找筹办上传的图片的巨细和范例
4.怎样利用InputStream办法?
拔出图片的需要前提
在我们入手下手上传之前,有两件主要的事我们必要做:
#Form标志的enctype属性应当设置成enctype="multipart/form-data"
#必要一个<inputtype=file>表单来利用户选择他们要上传的文件,同时我们必要导进System.IO称号空间来处置流工具
把以上三点使用到aspx页面。同时我们必要对SqlServer做以下的筹办。
#必要最少含有一个图片范例的字段的表
#假如我们另有别的一个变字符范例的字段来存储图片范例,那样会更好一些。
如今,我们筹办了一个Sql表(包括了一个image数据范例的字段),另有<inputtype=file>标志。固然我们还得筹办Submit按钮,以便用户在选择了图片今后提交。在这个按钮的Onclick事务里,我们必要读取拔取图片的内容,然后把它存进到内外。那我们先来看看这个Onclick事务。
提交按钮的Onclick事务的代码:
DimintImageSizeAsInt64
DimstrImageTypeAsString
DimImageStreamAsStream
’GetstheSizeoftheImage
intImageSize=PersonImage.PostedFile.ContentLength
’GetstheImageType
strImageType=PersonImage.PostedFile.ContentType
’ReadstheImage
ImageStream=PersonImage.PostedFile.InputStream
DimImageContent(intImageSize)AsByte
DimintStatusAsInteger
intStatus=ImageStream.Read(ImageContent,0,intImageSize)
’CreateInstanceofConnectionandCommandObject
DimmyConnectionAsNewSqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
DimmyCommandAsNewSqlCommand("sp_person_isp",myConnection)
’MarktheCommandasaSPROC
myCommand.CommandType=CommandType.StoredProcedure
’AddParameterstoSPROC
DimprmPersonImageAsNewSqlParameter("@PersonImage",SqlDbType.Image)
prmPersonImage.Value=ImageContent
myCommand.Parameters.Add(prmPersonImage)
DimprmPersonImageTypeAsNewSqlParameter("@PersonImageType",SqlDbType.VarChar,255)
prmPersonImageType.Value=strImageType
myCommand.Parameters.Add(prmPersonImageType)
Try
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Response.Write("Newpersonsuccessfullyadded!")
CatchSQLexcAsSqlException
Response.Write("InsertFailed.ErrorDetailsare:"&SQLexc.ToString())
EndTry
这是怎样事情的呢?
PersonImage是HTMLInputFile控件的工具。起首必要取得图片的巨细,可使用上面的代码完成:
intImageSize=PersonImage.PostedFile.ContentLength
然后前往图片的范例利用ContenType属性。最初,也是最主要的事就是获得ImageStream,这能够用以下代码完成:
ImageStream=PersonImage.PostedFile.InputStream
我们必要一个字节型数组来存储image内容。读取全部图片可使用Stream工具的Read办法来完成。Read(inbyte[]buffer,intoffset,intcount)办法有三个参数。【关于Read办法的具体能够参看.NetFrameWorkSDK】他们是:
buffer
字节数组。此办法前往时,该缓冲区包括指定的字符数组,该数组的offset和(offset+count)之间的值由从以后源中读取的字节交换。
offset
buffer中的从零入手下手的字节偏移量,今后处入手下手存储从以后流中读取的数据。
count
要从以后流中最多读取的字节数。
这个Read办法用以下代码完成:
intStatus=ImageStream.Read(ImageContent,0,intImageSize)
.
如今,我们已读取了全部图片的内容,下一步,我们要把这些内容存进到sql表。我们将利用存储历程来完成拔出图片范例和图片内容到sql表。假如你扫瞄了下面的代码,你将会发明我们利用了sqldbtype.image的数据范例(datatype)。Ok了,完成了这些,我们也就乐成的把图片存进到SqlServer中了。上面是我们编写的aspx页面。
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。 |
|