在線打開、保存非Web項目目錄下的文件

 

       在項目設計的時候,公司使用的第三方的soaoffice在線編輯文檔,雖然soaoffice打開文件的時候,不會從客戶端html代碼中獲取到文檔的真實路徑,但是爲了文檔的安全,文檔存放目錄還是沒有放在Web項目的目錄下。從soaoffice的例子代碼中沒有看到有打開“非Web項目目錄”中文件的例子代碼,但是對soaoffice做了一下研究之後,發現soaoffice是支持這個功能的,在windows下開發的時候打開其他磁盤目錄下的文件也是可以的。用一個小例子大家一起分享,下載地址:http://ishare.iask.sina.com.cn/f/10293911.html

       Soaoffice打開文件的原理:

       調用WebOpen方法打開文件,開發幫助中是這樣說的:

方法:function WebOpen(Document, WorkMode, UserName, ProgID);

功能:該函數使用HTTP協議從URL直接打開文件。

說明:Document:字符串類型,是相對於當前頁面的文檔路徑。
    
訪問頁面 Http://yourWebSite/abc/word.asp ,假如要在此頁面打開一個文檔,

    
如果執行WebOpen("test.doc",2,"張三"),那麼打開的文檔爲:
Http://yourWebSite/abc/test.doc
    
如果執行WebOpen("doc/test.doc",2,"張三"),那麼打開的文檔爲:
Http://yourWebSite/abc/doc/test.doc
    
如果執行WebOpen("../test.doc",2,"張三"),那麼打開的文檔爲:
Http://yourWebSite/test.doc
不管訪問的頁面路徑是什麼,如果Document參數的第一個字符是"/",那麼表示相對路徑是Web根路徑 Http://yourWebSite/

經研究發現,其實就是WebOpen的第一個參數是下載文件的相對路徑,不一定是什麼.doc的文件,動態頁也是可以的,在本例子中使用的是downfile.jsp,也就代碼中這樣寫的:

SOACtrl.webOpen("downfile.jsp", 1, "somebody", "Word.Document");

       只要寫出來一個downfile.jsp的動態頁,訪問downfile.jsp可以下載word文件就大功告成了,用上面的代碼,肯定可以打開那個word文件。(如果不能打開文件的時候可以用這個方法調試,看看動態頁到底能不能下載一個正常的文件)

      

       Soaoffice保存文件的原理:

       在打開文件的方法WebOpen執行之前,soaoffice總是會給SaveDocURL屬性賦值,SaveDocURL屬性的詳細說明看開發幫助,SaveDocURL屬性的作用就是:通知控件在用戶點保存時,把文件流提交到哪個服務器頁面處理接收和保存工作。其實就是相當於form中的action的作用,在表單提交的時候,數據提交到action指向的頁。

       SaveDocURL屬性指向的頁面中創建SOAOfficeX.SaveDocObj就可以獲取到文件流,然後處理文檔的保存工作。SOAOfficeX.SaveDocObj有一個現成的保存流到磁盤的方法saveToFile,這個方法的參數是一個絕對地址的磁盤路徑,只要保證這個路徑跟打開的文件磁盤路徑一樣,那麼在客戶端點保存的時候,自然就更新文件了;要是這個路徑跟打開的文件磁盤路徑不一樣,那就等於另存文件功能了。提醒:saveToFile不能創建目錄,如果目錄不存在,結果只能是保存失敗。

 

關鍵代碼說明:

/////////////////////////////////////////////////

Simple.jsp 打開文件頁

/////////////////////////////////////////////////

SOAOfficeX.SOAOfficeCtrl  SOACtrl = new  SOAOfficeX.SOAOfficeCtrl(pageContext);

// 設置SOAOFFICE中間件服務頁面

SOACtrl.ServerURL = "/soaservlet/soaserv.do";

 

SOACtrl.MenubarStyle = 5;

 

SOACtrl.SaveDocURL = "savefile.jsp"; // 保存文件工作由 savefile.jsp處理

SOACtrl.webOpen("downfile.jsp", 1, "somebody", "Word.Document"); //下載文件工作由downfile.jsp處理

 

/////////////////////////////////////////////////

Downfile.jsp: 下載文件

/////////////////////////////////////////////////

String filePath = "D://111//test.doc"; 

重點是這句,其他的代碼實現了文件的下載功能,這裏的filePath是本例子中測試使用的文件路徑,要保證這個 filePath savefile.jsp中的 filePath值一樣才能保存文件

 

 

/////////////////////////////////////////////////

Savefile.jsp: 保存文件

/////////////////////////////////////////////////

 

       String filePath = "D://111//test.doc"; //要與 Downfile.jsp中的filePath一致

 

       // 下面的代碼功能是保存文件到filePath位置

       SOAOfficeX.SaveDocObj   SOAObj  = new SOAOfficeX.SaveDocObj(pageContext);

 

       try{

              SOAObj.saveToFile(filePath); 

              SOAObj.returnOK();

       }

       finally

       {

              SOAObj.close();

       }

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