以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [分享]资料管理模块在线预览的实现  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=102179)

--  作者:天若千颖
--  发布时间:2017/6/14 15:15:00
--  [分享]资料管理模块在线预览的实现
开发一个资料管理模块,论坛上很多案例,很容易实现在资料存放列点击打开资料,或者直接保存资料的功能,直接打开的方式是将远程的文档下载到本地的RemoteFile文件夹中,再用本地程序打开,可能可能很多人都有这样的需求,对于一些特定的资料,只能让特定的用户看,不能保存,如何实现?

最近想出了这样一种方案,供大家参考。只能实现PDF、WORD、PPT、XLS、JPG、html文档的浏览,当然,其他格式的文档,只要能知道何时的js,同理可以实现。

基本思路是:当客户端要预览远程的文档时,通过网页的格式来打开,网页可以通过webbrowser来打开。关键就在于如果通过网页的格式来浏览上述文件。

首先,需要一个WEB服务器,这样生成的网页在本地才能打开。

其次:

1.PDF浏览

PDF浏览时最容易的了,我记得论坛里面有一个DLL,可以实现PDF在本地直接预览,但是这里推荐一个更方便的方式,通过PDF.js来预览。目前大家在网上看到的多数PDF在线浏览都是基于这个JS的。

PDF.js下载地址:http://mozilla.github.io/pdf.js/

直接将下载的安装包放到服务器上即可,PDF预览的格式为:http://mozilla.github.io/pdf.js/web/viewer.html?file=文件地址

在设计PDF预览的窗口的时候,只需要把webbrowser的地址设置为 http://mozilla.github.io/pdf.js/web/viewer.html?file=文件地址即可。

当然,为了文件的安全性,预览结束后,建议把预览的PDF删除掉。

PDF.JS预览:

图片点击可在新窗口打开查看此主题相关图片如下:pdf.png
图片点击可在新窗口打开查看


2.office浏览

推荐使用点聚weboffice插件 ,下载地址,http://forum.dianju.cn/viewtopic.php?f=9&t=82

首先你需要保存三种office文档格式的html源码,见DEMO文件:http://www.dianju.cn/demos/weboffice7/weboffice7-demo.rar

当客户端点击要预览的文档时,将远程的OFFICE文档地址写入html文件,然后将带有文档地址的html文件上传到WEB服务器上,通过打开这个html文件实现office的预览。

通过点聚weboffice预览office的方法比较简单,不需要复杂的服务器环境配置,不足之处是有可能有的时候会直接调用本地的office程序打开远程文件,这样就无法实现保密了,另外,打开远程文件的时候,本地有缓存,在一定的时间内可以复制。

当然,如果不用点聚weboffice的话,可以直接使用微软的office online接口来预览office文档,接口地址是:https://view.officeapps.live.com/op/view.aspx?src=文件地址  不足之处是,这个只支持10M以内的文档,而且,预览的时候微软会下载你的文件到他的服务器,安全性有限,当然,也可以自己搭建web office apps server,建立自己的预览服务器,配置比较复杂,可以参考http://www.cnblogs.com/poissonnotes/p/3238238.html,但是,这个方案好像也不能禁止文件的保存和打印。

点聚weboffice预览

图片点击可在新窗口打开查看此主题相关图片如下:office.png
图片点击可在新窗口打开查看

就写这么多,给大家提供一个思路,欢迎探讨。

--  作者:天若千颖
--  发布时间:2017/6/14 15:22:00
--  
 office预览还有一个过渡的办法,不过相比来说耗时一点,就是先把office文件转换为PDF,再预览PDF文件,这样就不需要任何组件了。转换的代码见:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=101545&skin=0
--  作者:有点色
--  发布时间:2017/6/14 15:43:00
--  
 谢谢分享。
--  作者:天若千颖
--  发布时间:2017/6/21 8:03:00
--  
请教色版一个问题。

目前文档查看我的做法是,文件放在FTP服务器上(简称F),当客户端要浏览某个文件时,需要先把该文件下载到本地电脑,然后再将文件上传到WEB服务器上(简称W),这样客户端可以用webbrowser及相关的插件在线浏览文档,当文件从本地电脑上传到W上之后,删除本地文件,当客户端关闭整个程序时,删除WEB服务器上的文件,这样基本做到了一个文件在本地和远程都没有留存。

现在有一个问题是,虽然我存放文件的服务器F和查看文件的服务器W都是一台服务器,IP也相同,但是就是这么一个先下载然后上传的过程,如果文件较大,会很费时间,尤其是网速比较慢的时候,从服务器的角度来看,无非是把一个文档从一个目录移动到了另外一个目录。如果Fox table有命令能够直接在FTP中将该文件直接复制到指定的目录,就省去了中间下载和上传的时间?Foxtale如何实现远程文件的复制呢?

不能用移动,虽然Rename的命令能够移动文件,但是移动之后原来的就没有了,我关闭项目之后是要删除这个用来浏览的web目录的,不然会存在文件被下载的风险。移动之后如果不删除,再移动回去,文件个数一多很难记录文件原来存放的位置。所以,还是只有复制文件比较好。

如果不能复制远程的文件,有没有其他什么迂回实现的方案?

--  作者:天若千颖
--  发布时间:2017/6/21 8:09:00
--  
我搜到FtpClient有一个 .retrieveFileStream的属性,但是Foxtable的帮助里面没有提到。该属性是否可用呢?

http://www.itnose.net/detail/5993.html

感觉这方法也是需要一个函数来存储远程文件的数据,然后再上传,和直接下载和上传文件功能类似吧,而且看帖子里面说大文件不能复制成功。
[此贴子已经被作者于2017/6/21 8:11:03编辑过]

--  作者:有点色
--  发布时间:2017/6/21 9:07:00
--  

 服务器放一个foxtable的项目,用openqq通讯或者http通讯,给服务器发送一个复制的指令。服务器自己把文件复制一下,即可。


--  作者:天若千颖
--  发布时间:2017/6/21 9:11:00
--  
http通讯功能是不是只有高级开发版才有?我服务器上有服务器端,openQQ复制文件的指令如何发?有详细一点的帮助或者例子吗?
--  作者:有点色
--  发布时间:2017/6/21 9:32:00
--  
以下是引用天若千颖在2017/6/21 9:11:00的发言:
http通讯功能是不是只有高级开发版才有?我服务器上有服务器端,openQQ复制文件的指令如何发?有详细一点的帮助或者例子吗?

 

给服务器openqq发送一条信息【我要复制|c:\\test.jpg|d:\\test.jpg】,接收后,把 test.jpg 复制到 D盘,不就好了?


--  作者:天若千颖
--  发布时间:2017/6/21 11:38:00
--  
没有看到帮助里面相关的用法介绍,消息是发给哪个用户? 用哪个属性,版主说详细一点吧,没有帮助,我们凭空想不出啊。
--  作者:有点色
--  发布时间:2017/6/21 11:55:00
--  
以下是引用天若千颖在2017/6/21 11:38:00的发言:
没有看到帮助里面相关的用法介绍,消息是发给哪个用户? 用哪个属性,版主说详细一点吧,没有帮助,我们凭空想不出啊。

 

不是很简单?直接给服务器发送信息就行了。服务器ReceivedMessage事件,取出信息。

 

http://www.foxtable.com/webhelp/scr/2990.htm