明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

在線編輯公文并保存到后臺(tái)數(shù)據(jù)庫(kù)

[摘要]在線編輯公文并保存到后臺(tái)數(shù)據(jù)庫(kù) -------------------------------------------------------------------------------- http://www.standsoft.com (2004.1.14) 文章來源:智島軟件 [IMG]...

在線編輯公文并保存到后臺(tái)數(shù)據(jù)庫(kù)
--------------------------------------------------------------------------------
http://www.standsoft.com (2004.1.14) 文章來源:智島軟件

[IMG]Http://www.hytian.com/ocx/NetOStar.jpg[/IMG]

在線演示http://www.oapro.com/ostarocx/sample/savefilepro/default.asp
源代碼http://www.oapro.com/ostarocx/download/OStarOCX_savefile.rar

概述
本文講解了一個(gè)使用辦公之星控件實(shí)現(xiàn)在線編輯文件并保存到后臺(tái)數(shù)據(jù)庫(kù)的例子,使用該方法沒有選擇文件步驟,可以在WEB環(huán)境下實(shí)現(xiàn)類似單機(jī)環(huán)境下點(diǎn)擊保存文件的效果。

引言

為了在HTML網(wǎng)頁(yè)中獲得上傳功能,在客戶端我們可以使用如下格式的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>

這種方案在客戶端和服務(wù)器端的使用都有很多限制。首先,我們必須使用POST方法,因?yàn)镚ET方法無法處理這樣的表單數(shù)據(jù)。并且,沒有什么方法可以在不使用表單的情況下引發(fā)一個(gè)POST動(dòng)作。把數(shù)據(jù)發(fā)送給表單處理程序后,瀏覽器將會(huì)把處理程序作為新頁(yè)面加載,然后使用者會(huì)看到一個(gè)不討人喜歡的頁(yè)面轉(zhuǎn)換過程。

辦公之星控件中的上傳方案

需要按照如下步驟操作:

客戶端:

將辦公之星控件所編輯的文檔保存至本地
利用HTTP協(xié)議將保存的臨時(shí)文檔發(fā)送給Web服務(wù)器

服務(wù)器端:

從Request對(duì)象中讀出上傳的二進(jìn)制文檔
讀出二進(jìn)制數(shù)據(jù)并且存儲(chǔ)到數(shù)據(jù)庫(kù)的BLOB型字段中。

利用辦公之星控件可以在WEB環(huán)境下實(shí)現(xiàn)和WORD功能相當(dāng)?shù)膱D文混排以及字處理功能,但如何將所編輯的文檔保存至服務(wù)器端?上述的方案似乎沒有什么新東西。按照前言中的說明,file控件的value值為只讀,一定存在選擇文檔在手動(dòng)點(diǎn)擊上傳按鈕的過程。是這樣嗎?先介紹二個(gè)辦公之星控件接口方法:

1. SaveToTempFile(str filename)

將當(dāng)前用辦公之星控件編輯的文檔保存至本地形成一個(gè)臨時(shí)文件,參數(shù)filename為臨時(shí)文件的文件名稱。該方法會(huì)返回一個(gè)參數(shù),這個(gè)參數(shù)表示臨時(shí)文件的絕對(duì)路徑。示例: SaveToTempFile("abc.ost")

2. UpLoadFile(str filepath,str operatorfile)

將本地指定文件上傳至服務(wù)器端,參數(shù)filepath為本地待上傳文件的絕對(duì)路徑,operatorfile為服務(wù)器端用來接收上傳文件流的文件名稱。該方法會(huì)返回一個(gè)參數(shù),提示操作過程中是否成功。示例:UpLoadFile("c:\abc.ost","http://www.oapro.com/save.asp")

看到這里,相信您已經(jīng)明白了,辦公之星控件已提供接口方法,將指定文件自動(dòng)上傳。下面給出客戶端完整的代碼:

<script language="vbscript">
Public Sub mnuFileSave_click()
dim str,strRet

'生成臨時(shí)文件
str=OStar.SaveToTempFile("abc.ost")

'將臨時(shí)文件上傳
strRet=OStar.UpLoadFile(str,"http://www.oapro.com/save.asp")

'上傳成功與否提示
alert(strRet)
End Sub
</script>

上述頁(yè)面中OStar為辦公之星控件在頁(yè)面中的操作對(duì)象名稱。以下代碼為服務(wù)器端如何處理上傳文件并保存至數(shù)據(jù)庫(kù):

<%
' 定義變量和對(duì)象
dim sql
dim rs
dim UpFile
dim conn
dim connstr
dim db

'保存上傳文件的數(shù)據(jù)庫(kù)名稱
db="db.mdb"

'取得上傳的二進(jìn)制數(shù)據(jù)
UpFile=Request.BinaryRead(Request.TotalBytes)

'建立數(shù)據(jù)庫(kù)連接
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

'添加上傳的二進(jìn)制內(nèi)容入數(shù)據(jù)庫(kù)
rs("UpFile").AppendChunk UpFile
rs.update

' 銷毀數(shù)據(jù)庫(kù)連接對(duì)象
rs.close
set rs=nothing
conn.close
set conn=nothing

' 返回存儲(chǔ)信息
Response.Write "Upload successful!"
%>

以上服務(wù)器端代碼并未考慮是否第一次保存,如果是的話,那么在數(shù)據(jù)庫(kù)中新建一個(gè)記錄保存上傳的文件,如果不是第一次保存,那么應(yīng)該是修改以前保存的記錄。

使用該方法的益處

不引起頁(yè)面轉(zhuǎn)換。
不需要專用組件。

這段程序是純腳本寫成的,可以很容易的插入到其他代碼中,而不需要任何HTML對(duì)象的配合。還可以把這個(gè)邏輯在任何支持COM標(biāo)準(zhǔn)的語言中實(shí)現(xiàn)。