【问题标题】:Any Embeddable Document Viewer任何可嵌入的文档查看器
【发布时间】:2011-06-14 06:49:16
【问题描述】:
我希望在我的 CakePHP 应用程序中包含一个文档查看器,用于上传文档。我想要一个支持 Microsoft Word(.DOC 和 .DOCX)、Microsoft PowerPoint(.PPT 和 .PPTX)和 Adobe Portable Document Format (.PDF) 的查看器。
我希望我的用户能够查看文档,但不能下载。谷歌文档查看器很棒,但用户只需将 URL 插入地址栏并下载文档。
我是否可以像可读文档一样与用户共享我的文档?
【问题讨论】:
标签:
php
cakephp
documentviewer
【解决方案1】:
首先你必须明白,当用户的浏览器显示一些文件/内容时,它已经在用户的机器上。它已经被下载了。没有“内容保留在服务器上,但用户可以看到”的神奇之处。数据总是从服务器传输到用户,用户可以让数据留在他的机器上——不管是哪种方式。
如果你理解这一点,你有几个选择:
- 您不关心拥有该文件的用户。这是最明智的选择。所有其他方法都是用户讨厌的某种“DRM”。
- 仅将用户应该看到的数据传输到浏览器:
- 生成用户正在查看的文档部分的图像并将其发送到浏览器。用户没有文本数据,需要执行许多请求才能下载所有文档。
- 编写一个浏览器插件(java、flash、javascript),从服务器读取加密文档,解密它们(同样,在用户的机器上 - 这意味着他可以窥视它)并显示它。这样一来,用户不仅可以获取文档,还需要对其进行解密。
现有解决方案,即嵌入幻灯片共享演示文稿并禁用下载选项。不要尝试自己发明,尤其是如果您不想在支持和持续改进的情况下走很长的路。
【解决方案2】:
我在使用 google 文档查看器时遵循以下准则。
- 每次生成文档的随机 URL 地址(使用服务器端脚本和 htaccess。我正在使用 PHP 和 htaccess)。这不会让任何人直接访问该文件。
- 使用 URL 对时间和日期进行编码(通过使用任何服务器字符串编码脚本),以便文件只能在特定时间(比如 5 分钟)内访问
- 仅通过匹配的 Google Document Viewer 用户代理输出文件。这只会让 Google Document Viewer 访问该文件,而其他人则无法访问,即使他们在浏览器中输入了该地址。
这仍然不是一个非常安全的方法,但对我来说是诀窍。