概述
本文講解了一個使用辦公之星控件實現後臺自動上傳文件的例子,使用該方法沒有選擇文件步驟,可以在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標準的語言中實現。
演示範例
爲了更生動地說明以上方法的效果,這裏給出一個演示範例,範例源碼可從這裏下載。
注:以上接口最新版辦公之星控件(最新版辦公之星控件試用版從這裏下載)纔有提供。
|