最近在一个异常庞大的业务系统开发项目中遇到了需要在WEB页面上浏览TIFF格式图形文件的需求,众所周知HTML是不支持TIFF格式的图形显示的。更糟的是,因为影像文件来源于扫描设备,所以用户不愿意再人工的转换成其他图形格式。并且为了减少网络传输数据量,所有影像文件都被压缩成ZIP并放在一个远程的文件服务器上。另外用户还需要系统提供简单的图形操作功能,如:缩放,旋转,幻灯片,翻转,打印等。
这是一个典型的客户端影像文件浏览器的功能,目前很多网站上都有实现,一般使用JS,FLASH等工具实现,但是都不太能适合我们这个项目的需求。
在此之前的一个项目中曾经也遇到过这样的需求,由于客户只使用IE浏览器,所以选择了通过ActiveX控件的方式实现了影像文件浏览器的功能。但是ActiveX控件只能在IE上运行,FF和Chrome等其他浏览器就无法运行这些ActiveX控件了。虽然FF下有ActiveX的插件,但是运行不是很稳定。另外一个选择就是Applet(由于本人不擅长JavaScript和Flash),当然,运行Applet需要JRE,不过在目前普遍使用光纤的环境下,下载一个20多MB的JRE也并非不可接受。所以我们有了同时使用ActiveX和Applet来实现影像文件浏览器的设想。当用户使用IE浏览器时,则由ActiveX提供影像文件浏览器,如果是FF或其他浏览器,则使用Applet插件来提供影像文件浏览器。
以下提供一个简单的处理流程图:简单描述一下整个处理流程:
1.根据用户的请求,查询数据库中对应的影像文件的存放路径等相关信息;
2.检查客户端浏览器的类型;
3.如果是IE浏览器,则跳转到使用ActiveX控件实现的影像文件浏览器的页面,否则就跳转到使用Applet实现的影像文件浏览器页面;
4.根据传给页面的参数,使用FTP方式从远程文件服务器上下载相关的影像文件到客户端本地文件系统,并另存为一个临时文件;
5.判断下载的临时文件是否是ZIP压缩文件,如果是则先进行解压缩处理;
6.ActiveX控件或Applet根据解压缩的临时文件展现实际的影像文件内容;
7.当用户关闭浏览器时,自动删除临时文件。
以下为实现的效果截图:
1. 使用ActiveX技术实现的影像文件浏览器:2.使用Applet技术实现的影像文件浏览器:
最后需要注意的是:为了能让Applet能够访问本地系统资源,需要将Jar文件进行数字签名,相关内容在我的另外一篇文章《Java Applet读写客户端串口——终极篇》中已经有详细的描述,在此就不再赘述了。
资源:
Applet实现的影像文件浏览器源代码已经放入SVN中:
URL:http://svn.storevm.org/svn/toolkit/imageviewer/trunk
用户名:reader
密码:reader
ActiveX实现的影像文件浏览器下载地址:
http://www.storevm.org/download/ImageViewer.rar