|          
 概述
 本文讲解了一个使用办公之星控件实现后台自动上传文件的例子,使用该方法没有选择文件步骤,可以在WEB环境下实现类似单机环境下点击保存文件的效果。
 
 引言
 
 为了在HTML网页中获得上传功能,在客户端我们可以使用如下格式的FORM:
 
 <FORM NAME="myForm"
 ACTION="TargetURL.asp"
 ENCTYPE="multipart/form-data"
 METHOD="post">
 <INPUT TYPE="file" NAME="myFile">
 <INPUT TYPE="submit" VALUE="Upload File">
 </FORM>
 
 这种方案在客户端和服务器端的使用都有很多限制。首先,我们必须使用POST方法,因为GET方法无法处理这样的表单数据。并且,没有什么方法可以在不使用表单的情况下引发一个POST动作。把数据发送给表单处理程序后,浏览器将会把处理程序作为新页面加载,然后使用者会看到一个不讨人喜欢的页面转换过程。
 
 办公之星控件中的上传方案
 
 需要按照如下步骤操作:
 
 客户端:
 
 将办公之星控件所编辑的文档保存至本地
 利用HTTP协议将保存的临时文档发送给Web服务器
 
 服务器端:
 
 从Request对象中读出上传的二进制文档
 读出二进制数据并且存储到数据库的BLOB型字段中。
 
 利用办公之星控件可以在WEB环境下实现和WORD功能相当的图文混排以及字处理功能,但如何将所编辑的文档保存至服务器端?上述的方案似乎没有什么新东西。按照前言中的说明,file控件的value值为只读,一定存在选择文档在手动点击上传按钮的过程。是这样吗?先介绍二个办公之星控件接口方法:
 
 1. SaveToTempFile(str filename)
 
 将当前用办公之星控件编辑的文档保存至本地形成一个临时文件,参数filename为临时文件的文件名称。该方法会返回一个参数,这个参数表示临时文件的绝对路径。示例: SaveToTempFile("abc.ost")
 
 2. UpLoadFile(str filepath,str operatorfile)
 
 将本地指定文件上传至服务器端,参数filepath为本地待上传文件的绝对路径,operatorfile为服务器端用来接收上传文件流的文件名称。该方法会返回一个参数,提示操作过程中是否成功。示例:UpLoadFile("c:\abc.ost","http://www.oapro.com/save.asp")
 
 看到这里,相信您已经明白了,办公之星控件已提供接口方法,将指定文件自动上传。下面给出客户端完整的代码:
 
 <script language="vbscript">
 Public Sub mnuFileSave_click()
 dim str,strRet
 
 '生成临时文件
 str=OStar.SaveToTempFile("abc.ost")
 
 '将临时文件上传
 strRet=OStar.UpLoadFile(str,"http://www.oapro.com/save.asp")
 
 '上传成功与否提示
 alert(strRet)
 End Sub
 </script>
 
 上述页面中OStar为办公之星控件在页面中的操作对象名称。以下代码为服务器端如何处理上传文件并保存至数据库:
 
 <%
 ' 定义变量和对象
 dim sql
 dim rs
 dim UpFile
 dim conn
 dim connstr
 dim db
 
 '保存上传文件的数据库名称
 db="db.mdb"
 
 '取得上传的二进制数据
 UpFile=Request.BinaryRead(Request.TotalBytes)
 
 '建立数据库连接
 Set conn = Server.CreateObject("ADODB.Connection")
 connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
 conn.Open connstr
 sql="select UpFile from OStarRepTemplate where (id is null)"
 rs.open sql,conn,1,3
 rs.addnew
 
 '添加上传的二进制内容入数据库
 rs("UpFile").AppendChunk UpFile
 rs.update
 
 ' 销毁数据库连接对象
 rs.close
 set rs=nothing
 conn.close
 set conn=nothing
 
 ' 返回存储信息
 Response.Write "Upload successful!"
 %>
 
 以上服务器端代码并未考虑是否第一次保存,如果是的话,那么在数据库中新建一个记录保存上传的文件,如果不是第一次保存,那么应该是修改以前保存的记录。
 
 使用该方法的益处
 
 不引起页面转换。
 不需要专用组件。
 
 这段程序是纯脚本写成的,可以很容易的插入到其他代码中,而不需要任何HTML对象的配合。还可以把这个逻辑在任何支持COM标准的语言中实现。
 
 
 
 |