WEB環境中後臺自動上傳文件至數據庫的實現

 


概述

本文講解了一個使用辦公之星控件實現後臺自動上傳文件的例子,使用該方法沒有選擇文件步驟,可以在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標準的語言中實現。

演示範例

爲了更生動地說明以上方法的效果,這裏給出一個演示範例,範例源碼可從這裏下載。

注:以上接口最新版辦公之星控件(最新版辦公之星控件試用版從這裏下載)纔有提供。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章