您现在的位置: 网页吧 > 技术文档 > 网络编程 > NET专区 > 正文
  • 站内搜索:

用ASP.NET实现Office文档的存储与分类显示

[作者:佚名 | 点击数: | 时间:2008-7-21]【
一、前言:
    微软的Office系列产品是目前最常用的办公软件,如何把日积月累的文档文件有效地管理起来并进行检索,是目前很多企事业单位寻求解决文件管理的目标。本文运用ASP.Net技术与SQL Server数据库相结合,实现了对Office文档文件的分类存储管理并通过IE浏览器进行显示,为文件管理提供一种可行的方法。
二、设计思路
    目前普遍使用Office工具撰写各种文件、资料,怎样对这些文件进行有效的管理是一件令人头疼的事情,把各种文件按照不同的分类分别存储到不同的文件夹下,查找起来同样让人烦恼。本文的设计思路是把这些文件存储到数据库中,设置文件分类字段,可以把文件进行简单的分类管理;同时设置查询关键字段,可以快速查找到需要的文件。
    SQL Server 2000是运行在windows 2000 下的一个功能强大的关系型数据库管理系统,由于同其与windows 2000紧密集成,它的数据处理速度相当有保证,也更加易于维护管理。SQL Server 200数据库表中的Image数据类型可以存储数据流类型的数据,本文把利用ASP.NET把Office文件转换成数据流存储到数据库中,在数据使用的时候,再把数据从数据流转换成Office文件显示给用户。
    1. 定义恰当的数据库表结构。
    要实现Office文件的数据库存储必须定义恰当的数据库表结构,该结构有必须包含两种字段,一是能够记录Office文件的文件类型的字段,这样数据还原的时候就可以作为依据进行数据转换;一是有能够存储数据流的字段,该字段必须是Image类型。
    例如建立如下数据库:
数据库名
Test
表名称
test
字段名
字段类型
字段长度
备注
id
int
4
关键字,记录唯一性标记
标题
Varchar
100
Office文档标题
文件类型
Char
3
Office文档类型
主题词
Varchar
100
Office文档检索主题关键字
内容
Image
16
存储Office文档的字段
 
2. 把Office文件转换成数据流存储到数据库中
定义char类型变量,用以记录该Office文件类型。
定义FileStream类型变量,把Office文件作为数据流进行读取。
定义Byte()数组类型变量,把数据流作为二进制变量存储到该数组中,这样可以对数据库字段进行赋值。
如下代码是把文件转换成数据流存储到数据库中。
'引用命名空间
 Imports System.Data.SqlClient
Imports System.IO
'设置连接字符串等公共变量
Dim connstr = "User ID=sa;Initial Catalog=test;Password=sa; Data Source=SERVER;"
Dim myconn As New SqlConnection(connstr)
Private Sub Button_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_save.Click
   Dim sqlstr As String
   Dim filetype as string '上传文件类型
   Dim maxid As String '用户生成id号码
   Dim myFileStream As FileStream
 Dim byteData As Byte()
'生成关键字id号码
sqlstr = "select max(id) from test "
   myconn.Open()
   Dim mycmd As New SqlCommand("", myconn)
   mycmd.CommandText = sqlstr
   If IsDBNull(mycmd.ExecuteScalar()) Then
         maxid = "0"
   Else
         maxid = mycmd.ExecuteScalar()
   End If
 If Me.input1.PostedFile.FileName <> "" Then '判断用户是否上传文件
    '首先保存非大字段类型的数据
Filetype=right(Me.input1.PostedFile.FileName)
     sqlstr = "insert into test (id,标题,主题词,文件类型) values('" & maxid + 1 & "','" & Trim(Me.TextBox_bt.Text) & "','" & Trim(Me.TextBox_ztc.Text) & "','" & Filetype & "')"
      mycmd.CommandText = sqlstr
      mycmd.ExecuteNonQuery()
    myconn.Close() '关闭数据库连接
     '上传文件存储
      sqlstr = "select id,内容 from test where id='" & maxid + 1 & "'" 
      Dim daadp As New SqlDataAdapter(sqlstr, myconn)
      Dim ds As New DataSet()
      Dim sqlBuilder = New SqlCommandBuilder(daadp)
      myconn.Open()
      daadp.Fill(ds, "test")
      myconn.Close()
      Dim myrow = ds.Tables("test").Rows(0) '定位数据集记录
      ds.Tables("test").DefaultView.AllowEdit = True
      Me.input1.PostedFile.SaveAs(Server.MapPath("picture.zzz")) '读取文件,转换成数据流
      myFileStream = New FileStream(Server.MapPath("picture.zzz"), IO.FileMode.Open)
      ReDim byteData(myFileStream.Length - 1)
      myFileStream.Read(byteData, 0, myFileStream.Length)
      myFileStream.Close()
      myrow.item("内容") = byteData '数据流存储到数据库中
      daadp.Update(ds, "test")
      myconn.Close()
    
 Else '仅保存文本数据
    sqlstr = "insert into test(id,标题,主题词) values('" & maxid + 1 & "','" & Trim(Me.TextBox_bt.Text) & "','" & Trim(Me.TextBox_ztc.Text) & "')"
   mycmd.CommandText = sqlstr
   mycmd.ExecuteNonQuery()
 myconn.Close() '关闭连接
 End if
 Response.Write("<script language='javascript'>alert('成功保存!');</script>")
End Sub
3. 把数据库中的数据按照原来文档类型转换成相应的Office文件并显示在Web页面中。
在Web页面中定义能够用于显示文件的容器,然后在该容器内调用把数据流转换成Office文件的页面。
在aspx文件html代码中添加一个容器,用来显示Office文件,具体html代码如下:
<iframe id="i1" style="Z-INDEX:107; WIDTH:760px; HEIGHT: 500px" name="i1" src="文件显示.aspx?id=<%response.write(request("id"))%>"></iframe>
                   
在把数据流转换成Office文件的文件显示页面内不需要任何控件和多余的html代码,只要按照需求读取数据库内容,根据预先存储的Office文件类型把数据读取出来就可以。
Office文件显示Web窗体设计
Ø         新建一Web窗体,设计窗体名称为:文件显示. Aspx。
Ø         该窗体不需要控件,只要把下面源代码与页面html格式替换即可。
页面代码如下:
 <%@ import namespace="System.Data"%>
<%@ import namespace="System.Data.SqlClient"%>
<script language="vb" runat="server">
private sub page_load(ByVal sender As System.Object, ByVal e As System.EventArgs)
     Dim filetype as string '显示文件类型 
try 
        if request("id") <> "" then
            Dim connstr = "User ID=sa;Initial Catalog=test;Password=sa; Data Source=SERVER;"
            Dim myconn As New SqlConnection(connstr)
            myconn.open()
            Dim dada As New SqlDataAdapter("select id,内容,文件类型 from test where id='" & request("id") & "'", myconn)
            Dim ds As New DataSet()
       dada.Fill(ds, "test")
         filetype=ds.Tables("test").Rows(0).Item("文件类型")
          '读取预定义的文件类型
         if filetype ="doc" then
            Response.ContentType = "application/msword"
         else if filetype ="ppt" then
            Response.ContentType = "application/ms-powerpoint"
         else if filetype ="xls" then
            Response.ContentType = "application/vnd.ms-excel"
         Else
            response.write("没有上传文件")
         end if
          '根据文件类型显示office文件
            if not isdbnull(ds.Tables("test").Rows(0).Item("内容"))
               Response.BinaryWrite(ds.Tables("test").Rows(0).Item("内容"))
            end if
           myconn.close()
        end if
    catch e26 as exception
       response.write(e26.message)
end try
end sub
</script>
用ASP.NET实现Office文档的存储与分类显示网友评论
发表评论
  • 姓 名 :* (必填项)
  • E-mail: QQ:
  • 评 分 : 1分 2分 3分 4分 5分
  • 评论内容:
·请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任。
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据。
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为。
网页吧·中国站长第一门户