首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 软件频道>用ASP.NET2.0在数据库中存储二进制文件

用ASP.NET2.0在数据库中存储二进制文件

2007-01-10 10:53作者:朱先忠编译出处:天极开发责任编辑:方舟

  四、 上传一个图像并使用ADO.NET代码存储二进制数据

  这个图像画廊允许访问者上传图片文件(GIF,JPG和PNG格式)到这个应用程序中。一旦上传,一个新的记录将被添加到Pictures表格并且该图像文件的内容即被存储在新的记录的ImageData列内。为了实现在ASP.NET 2.0中把文件从web浏览器端上传到web服务器,本示例中使用了FileUpload控件。FileUpload控件的使用方法是很简单的事情-只需要把它从工具栏拖动到你的页面上即可。最终,这个FileUpload控件将在用户的浏览器端生成为标准的文件上传形式-一个"Browse"按钮(当点击它时)允许用户从他们的硬盘中选择一个文件上传到web服务器。

  例如,为了创建一个接口以实现添加一个新的图像,我使用一个TextBox控件来捕获图片的标题,还有一个FileUpload控件用于允许用户指定要上传的图像:

<b>Title:</b>
<asp:TextBox ID="PictureTitle" runat="server" />
<br />
<b>Picture:</b>
<asp:FileUpload ID="UploadedFile" runat="server" />
<br />
<asp:LinkButton ID="btnInsert" runat="server" Text="Insert" />
<asp:LinkButton ID="btnCancel" runat="server" Text="Cancel" />

  上面的代码创建一个页面,用户能够从他们的硬盘上指定一个要上传到web服务器的文件。

  

  一旦用户选择了一个文件并且寄送了这个表单(例如通过点击"Insert"按钮),那么,指定文件的二进制内容即被寄送到web服务器。从服务器端代码中,这种二进制数据通过FileUpload控件的PostedFile.InputStream属性成为可用,这正如下面的标记和代码所展示的:

Protected Sub btnInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInsert.Click
'确保一个文件被成功上传
If UploadedFile.PostedFile Is Nothing OrElse String.IsNullOrEmpty(UploadedFile.PostedFile.FileName) OrElse UploadedFile.PostedFile.InputStream Is Nothing Then
 ... 显示错误信息...
 Exit Sub
End If
'确保我们在操作一个JPG或者GIF文件
Dim extension As String = Path.GetExtension(UploadedFile.PostedFile.FileName).ToLower()
Dim MIMEType As String = Nothing
Select Case extension
 Case ".gif"
  MIMEType = "image/gif"
 Case ".jpg", ".jpeg", ".jpe"
  MIMEType = "image/jpeg"
 Case ".png"
  MIMEType = "image/png"
 Case Else
  '无效的文件类型上传
  ... 显示错误信息...
  Exit Sub
End Select

'与数据库连接并且把一条新记录插入到Products表格中
Using myConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("ImageGalleryConnectionString").ConnectionString)

Const SQL As String = "INSERT INTO [Pictures] ([Title], [MIMEType], [ImageData]) VALUES (@Title, @MIMEType, @ImageData)"
Dim myCommand As New SqlCommand(SQL, myConnection)
myCommand.Parameters.AddWithValue("@Title", PictureTitle.Text.Trim())
myCommand.Parameters.AddWithValue("@MIMEType", MIMEType)

'把FileUpload控件的InputStream加载到字节数组中
Dim imageBytes(UploadedFile.PostedFile.InputStream.Length) As Byte
UploadedFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length)
 myCommand.Parameters.AddWithValue("@ImageData", imageBytes)
 myConnection.Open()
 myCommand.ExecuteNonQuery()
 myConnection.Close()
End Using
End Sub

  在此,这个事件处理器首先确保已经上传一个文件。然后,它根据被上传的文件的扩展名来决定MIME类型。

  上面最值得注意的是那些设置@ImageData参数的代码部分。首先,创建一个名为imageBytes的字节数组并且使其长度为被上传的文件相应的InputStream。然后,从InputStream中使用Read方法把二进制内容填入这个字节数组。注意,正是这个字节数组被指定为@ImageData的值。

关注此文的读者还看过:

返回软件频道首页

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络