在IE里打开一个文件,修改后上传.(寻找最佳方案)

           在一次项目调查中,面对客户提出的在IE里打开一个office文件,修改后上传的要求进行对应.
                    
                                           在Web里打开Office文档文件,修改后上传
                                 
要求:
      不是点击文件的link下载
      而是直接在IE(Internet Explorer)内打开Excel。
     用户对IE内被打开的Excel进行浏览、编集
     保存IE内被打开的Excel的編集后UPLOAD。

一.  设计方案

方案一

 注意点1:原来的设计里,从数据库取数据是一个下载的动作,会弹出对话框"打开/保存/取消"而现在不要求,弹出这个对话框,这是IE自带的功能.只有重新写类,完成数据查找,生成文件的功能.(与注意点2相关).对于对话框弹出的设置还要调查;

 

 

注意点2:上传文件,这里要求在IE里打开的文件必须有修改功能
(1)在web上编集,创建office文档的前题

1 Tomcat

步骤A,B

A web.xml文档中加入如下等代码
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>doc</extension>
<mime-type>application/msword</mime-type>
</mime-mapping>

说明:但excel却不是从IE里打开的,这和IE的设置有关.

 

B.D:\Tomcat42\webapps\webdav\WEB-INF\web.xml将注释放开

<init-param>

<param-name>readonly</param-name>

<param-value>false</param-value>

</init-param>

说明:所要修改的文件必须放在webdav这个目录下面.并具要有修改的权限.

这存在数据安全的问题. 
2 在安装Office2003以后,有一个ActiveX控件被安装到了系统中,这个控件位于“Program Files\Microsoft Office\OFFICE11\owssupp.dll”。通过这个控件,客户端页面上的Javas cript就可以激活本地的Office软件,来实现打开、编辑Office文档。(另,Office XP应该就已经包含这个ActiveX控件了。)这个必须在本地设定,有局限性;(这项设置是从网络上找的,因为环境的关系没有进行调查)
3 Windows 2003由于缺省没开放WebDAV协议,限制了Office文档的保存.(这项设置是从网络上找的,因为环境的关系没有进行调查)

开放
WebDAV方法如下:
1.
打开IIS6
2.
打开Web Service扩展
3.
选中WebDAV,右键,Allowed
4.try again! is OK???

IIS必须设置为可写入,文件系统everyone可修改权限

  (二)在Web里打开Office文档文件

首先,用Script创建一个本地的对象:

openDocObj = new ActiveXObject("SharePoint.OpenDocuments.2"); // 为了兼容Office XP,可以创建“SharePoint.OpenDocuments.1”

openDocObj.EditDocument("http://xxx.xxx.xxx.xxx:8080/webdav/file/Book1.xls");

就可以直接激活Excel,在Excel里面编辑文档,然后直接点击Excel里面的保存功能,就可以将文件保存会服务器上了。注意:为了让Excel能将编辑后的文档直接保存会服务器,访问Excel站点的当前上下文的Windows Identity必须对服务器的相应目录(即http://xxx.xxx.xxx.xxx:8080/webdav/file/这个虚拟目录所对应的服务器上的物理路径)有相应的写权限,否则保存动作会失败。编辑完成后,EditDocument()会返回一个bool值,来反映编辑操作是否成功。

*修改设计后,只能打开office文档,例1txt文件,此时就无法打开;依据这个就必须先对文件类型进行判断,根据不同的文件类型,执行不同的打开文件的方式.由于只要求调查excel文件的打开,保存,修改;因此,非office 文件的方式没有进行相关的调查.

注意点:修改后的文件,无法判断是否修改;

(1)先设为以修改时间决定,但是这里要对文件进行多次读写的操作

 

读取文件修改的时间:

File类:

Java.lang.Object

|

+――java.io.File

File类扩展了object对象,实现了Serializable, Comparable定义的接口,可以通过File的一个实例对jvm上的文件系统进行各种操作

 

File currentFile;
/**
* 返回当前指向的文件对象的最后修改日期
*/
public date  getFileTimeStamp(){

  return new Date(currentFile.lastModified());
}

这里存在缺陷

A 在word 工具/选项/保存/自动保存时间间隔的功能,一般都设为10分钟,系统会自动保存word,这就存在了,打开一个word 文件后每隔10分钟就会自动保存一次;故会产生新的修改日期,而文件却没有被修改;

B而在Excel里同样在工具/选项/保存/自动保存恢复信息,每隔[]分钟;自动恢复文件保存位置[];

 

(2)通过比对修改前和修改后文件的内容,这将时个很费时间和资源的设计;(优先级最低)

 方案二:不将文件上传,直接下载到本地

将文件下载到本地(设一个固定的路径下),没法解决弹出对话框"打开\保存\取消"的问题;(与IE相关)

如果要解决这个问题,可用cvs下载;cvs打开后是excel格式的;但是其它的文件格式doc\txt等就要重新考虑了;

无法解决,用IE打开的问题;不用IE打开,直接用本地的office工具,这就脱离了程序的控制,没办法控制文件的修改和上传了;

 

二.  存在问题

  

这个功能目前存在的问题:

对软件环境有很强的依赖性,必须事前对IE ,服务器,客户端,中间件对其的支持进行调查;有可能会涉及到客户端的设置.(如:下载对话框是否弹出);客户端是否对ActionX控件的支持,是否允许使用.

对直接将数据放在tomcat 下的webdav目录下,并给予了最高权限;这存在着安全性的问题,是否要考虑到.

如果环境不是Tomcat,而是weblogc 如果发布时同时有一个IIS中间件,可以对其进行设置,以达到能对office文件进行在线修改的功能;因为时间和环境的关系没有对其的实现进行调查,并且具体的实现也要调查.

  

三.  软件环境

  这对软件环境有要求,调查的环境如下:

  

 

    备注

数据库

 支持多数据库

IE

6.0

 

服务器

xp

 

客户端

xp

 

Tomcat

4

 

 

posted @ 2006-04-14 15:29  zhanlh  阅读(2159)  评论(0)    收藏  举报