Foxtable(狐表)用户栏目专家坐堂 → [分享]资料管理模块在线预览的实现


  共有8025人关注过本帖树形打印复制链接

主题:[分享]资料管理模块在线预览的实现

帅哥哟,离线,有人找我吗?
天若千颖
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
[分享]资料管理模块在线预览的实现  发帖心情 Post By: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
图片点击可在新窗口打开查看

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

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/14 15:22:00 [显示全部帖子]

 office预览还有一个过渡的办法,不过相比来说耗时一点,就是先把office文件转换为PDF,再预览PDF文件,这样就不需要任何组件了。转换的代码见:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=101545&skin=0

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/21 8:03:00 [显示全部帖子]

请教色版一个问题。

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

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

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/21 8:09:00 [显示全部帖子]

我搜到FtpClient有一个 .retrieveFileStream的属性,但是Foxtable的帮助里面没有提到。该属性是否可用呢?

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/21 9:11:00 [显示全部帖子]

http通讯功能是不是只有高级开发版才有?我服务器上有服务器端,openQQ复制文件的指令如何发?有详细一点的帮助或者例子吗?

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/21 11:38:00 [显示全部帖子]

没有看到帮助里面相关的用法介绍,消息是发给哪个用户? 用哪个属性,版主说详细一点吧,没有帮助,我们凭空想不出啊。

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/21 12:41:00 [显示全部帖子]

参考http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=76550&skin=0

基本明白了,多谢版主,有问题我再请教。

 

[此贴子已经被作者于2017/6/21 12:48:03编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/22 14:20:00 [显示全部帖子]

版主,我看了楼上上代码,还是有一些地方不明白,特来请教。比方说,我要从客户端发送信息,让服务端把C盘的文件复制到D盘

客户端发送信息:

QQClient.Send("复制|c:\test.jpg|d:\test.jpg")

这个地方分隔符 |有什么特殊意义吗?

服务端ReceivedMessage事件如果是

Messagebox.show(e.message)的话,能够接收到完整的一句话“复制|c:\test.jpg|d:\test.jpg” ,

如何把这句话中的三个部分拆开成为FileSys的命令呢?


[此贴子已经被作者于2017/6/22 14:21:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/22 16:14:00 [显示全部帖子]

多谢版主,已经解决。

Dim Multi As String = "CopyFile|d:\1.txt|e:\1.txt"
Dim Values() As String
Values = Multi.split("|")
If Multi.StartsWith("CopyFile") Then
FileSys.CopyFile(Values(1),Values(2),True)
End If

 回到顶部
帅哥哟,离线,有人找我吗?
天若千颖
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:683 积分:4882 威望:0 精华:0 注册:2014/6/15 16:01:00
  发帖心情 Post By:2017/6/22 16:32:00 [显示全部帖子]

测试了一下,服务器端运行OpenQQ,QQClient.Send的代码怎么必须要客户端登录OpenQQ才能发送过去,没有登录通过代码也发送不过去.

怎么能实现客户端不需要登录OpenQQ就能与服务端通信?

我要在窗口中通过点击实现服务器上文件的复制,这个不能强制客户端在点击这个按钮之前还必须要登录OpenQQ啊。
[此贴子已经被作者于2017/6/22 16:32:57编辑过]

 回到顶部
总数 15 1 2 下一页