Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>开发者网络>微软开发专栏>ASP.NETC#VB.NETVC.NET技术专题XML|软件频道产品中心群乐下载群乐:大家耍QQ
您现在的位置: 天极网 > 开发频道 > 微软开发专栏 > 用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的值。

共4页。 9 1 2 3 4 :
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml