在浏览器中打开文件时,如何识别文件的独特内容?

时间:2014-12-22 14:19:31

标签: javascript html5 pdf local-storage offlineapps

我正在开发一个经常脱机运行的HTML5 / JavaScript Web应用程序。用户将PDF加载到应用程序中,然后可以选择添加单独出现在PDF中的注释。我正在使用本地存储来保存所做的任何评论,因为这可以离线工作,而不是使用在线数据库。如果用户以后重新打开相同的PDF,我希望能够加载之前发表的任何评论。为此,我想我需要识别特定PDF的独特之处,以便我可以在本地存储数据库中存储其他值。如果用户以后打开相同的PDF,我可以查询数据库以查看之前是否对该文件做过评论,如果是,则在屏幕上显示。

目前我正在使用URL.createObjectURL()打开PDF,这会创建一个唯一的blob URL来访问该文件。这是必需的,因为它可以脱机打开。我最初的想法是,当存储在本地存储数据库中时,该blob可以用作唯一标识符,但是blob可以理解地在每次加载时发生变化,并且如果用户在其本地机器上移动PDF的位置,则可以改变blob。例如,连续两次打开同一文件会产生:blob:null/c3ab544d-e16d-cf49-86d8-03c1d67a6ccbblob:null/5ad4b666-e6ba-1a41-a149-d7a77f648261

有没有办法可以记录打开文件的独特内容,以便我可以检查用户是否会在以后重新打开该文件?

2 个答案:

答案 0 :(得分:1)

考虑到"添加单独出现在PDF"不会影响文件本身(如嵌入在新版本文件中的PDF注释),您可以使用像md5这样的哈希来识别同一个文件。这与查看下载过程中文件是否损坏的方法相同。

唯一需要注意的是,出于安全考虑,浏览器可以通过离线存储访问文件内容。

答案 1 :(得分:0)

虽然它是可选的,但您可能希望尝试使用PDF ID标记。您可以使用针对内容的一些正则表达式来提取它。它看起来像这样:

 /ID[<CDB5FA9499F9C1A71B9784FD77FB5B4D><CDB5FA9499F9C1A71B9784FD77FB5B4D>]

来自PDF规范:

ID

阵列

(可选,但强烈推荐; PDF 1.1)一个由两个字节字符串组成的数组,构成文件的文件标识符(参见第10.3节“文件标识符”)。两个字节字符串应该是直接对象,应该是未加密的。虽然此条目是可选的,但它的缺失可能会阻止文件在某些​​依赖于唯一标识文件的工作流中运行。