将各种类型的文档(ods、ms office、pdf)保存到 Jackrabbit 存储库中

Posted

技术标签:

【中文标题】将各种类型的文档(ods、ms office、pdf)保存到 Jackrabbit 存储库中【英文标题】:Persisting various types of documents (ods, ms office, pdf) into Jackrabbit repository 【发布时间】:2011-07-07 04:15:09 【问题描述】:

我不确定选择哪种方法来存储这些类型的文档,因为关键要求是收集尽可能多的元数据,而 pdf、ods 和 MS office 文档有various types of metadata ...

因此,如果节点树具有“组/用户/类别/文档”或“类别/组/用户/文档”结构(我不确定哪个更好),每个文档都必须具有一个属性“类型”,如果它是 pdf/doc/odt/ppt 等,我每次都必须对此进行测试,以了解它具有哪些元数据类型,对吗?在我看来这很无效..

【问题讨论】:

【参考方案1】:

我个人会尽量避免构建您的层次结构以包含文件类型。这会起作用,但它似乎是强迫和不自然的。

相反,我会将我的层次结构设计为最适合您的应用程序(例如,如果您有组和用户,那么可能是“组/用户”并将用户的文档存储在相应的用户节点下),并使用属性捕获文件类型和其他元数据。

如果您使用“nt:file”约定将文件上传到 JCR,则每个文件将由一个类型为“nt:file”的节点(根据文件名命名)表示。然后该节点将包含一个名为“jcr:content”的子节点,约定是为此子节点使用“nt:resource”节点类型。在 JCR 2.0 中,“nt:resource”节点类型定义了这些属性定义:

jcr:data (BINARY) 必填 jcr:lastModified (DATE) 自动创建 jcr:lastModifiedBy (STRING) 自动创建 jcr:mimeType (STRING) 受保护? jcr:encoding (STRING) protected?

请注意,JCR 实现可以将“jcr:mimeType”和“jcr:encoding”视为受保护,但Jackrabbit 和ModeShape 都不会这样做(这意味着您可以而且必须手动设置这些属性)。

这是一个用于上传文件和设置“jcr:mimeType”属性的代码sn-p:

// Get an input stream for the file ...
File file = ...
InputStream stream = new BufferedInputStream(new FileInputStream(file));

Node folder = session.getNode("/absolute/path/to/folder/node");
Node file = folder.addNode("Article.pdf","nt:file");
Node content = file.addNode("jcr:content","nt:resource");
Binary binary = session.getValueFactory().createBinary(stream);
content.setProperty("jcr:data",binary);
content.setProperty("jcr:mimeType","application/pdf");

现在,开箱即用的“nt:file”和“nt:resource”节点类型不允许您设置它们未定义的属性。但是您可以使用 mixins 来绕过这个限制,并将元数据直接存储在这些节点上。请参阅我的 detailed answer 在之前的 other question 上描述如何执行此操作。

【讨论】:

以上是关于将各种类型的文档(ods、ms office、pdf)保存到 Jackrabbit 存储库中的主要内容,如果未能解决你的问题,请参考以下文章

OpenOffice 和 MS Office 格式转换为 TIFF

{过时·留存}MS Office文档

如何通过 C#.net 将表格导出到打开的 office 电子表格(.ods 文件)中?

如何在 C# 中从 MS Office 文档中提取文本

如何查找当前打开的 MS Office 文档的名称?

Alfresco 附加的 word 文档无法使用 ms office 在线编辑