在项目设计的时候,公司使用的第三方的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();
}
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();
}