`

简单内容管理实现:使用JCR对二进制文件的读写和全文检索

 
阅读更多

1.二进制文件的存储

Node root = session.getRootNode();
Node smartnote = root.getNode("smartnote");
note = smartnote.addNode("note");
filenode = note.addNode("file", "nt:file");

note.setProperty("utccreatetime", CommonUtils
        .parseString(new Date(), 5));

resnode = filenode
        .addNode("jcr:content", "nt:resource");

MimeTable mt = MimeTable.getDefaultTable();
String mimeType = mt.getContentTypeFor(file.getName());
//注意默认mimetype不好用,需要自己写,mimetype必须正确,否则全文检索不能用
if (mimeType == null) {
    mimeType = SmartUtils.getFileMimeType(filename);
}
System.out.println(mimeType);

resnode.setProperty("jcr:mimeType", mimeType);
resnode.setProperty("jcr:encoding", "");

ote.setProperty("title", input.getName());
                    
Calendar lastModified = Calendar.getInstance();
lastModified.setTimeInMillis(file.lastModified());
resnode.setProperty("jcr:lastModified", lastModified);
resnode.setProperty("jcr:data", new FileInputStream(file));
note.setProperty("utcupdatetime", CommonUtils.parseString(
        new Date(), 5));
note.addMixin("mix:referenceable");
note.addMixin("mix:versionable");
session.save();

2.全文检索

QueryManager qm = session.getWorkspace().getQueryManager();
String path2 = "//smartnote/note/element(*, nt:file)[(jcr:contains(jcr:content, '"+key+"'))]";
Query query = qm.createQuery(path1, Query.XPATH);
QueryResult result = query.execute();
NodeIterator ir = result.getNodes();

3.内容读取
Node node = session.getNodeByUUID(input.getUuid());
Node filenode = node.getNode("file");
InputStream in = filenode.getNode("jcr:content")
        .getProperty("jcr:data").getStream();
String filename = SmartUtils.getTempPath() + "/"
        + this.getEditorInput().getName() + ".doc";
File file = new File(filename);
OutputStream os = new FileOutputStream(file);
byte buf[] = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
    os.write(buf, 0, len);
}
os.close();
in.close();

分享到:
评论

相关推荐

    mcs:使用 jcr 和 Oak 的 mcs 原型

    **正文** 在IT行业中,尤其是Java生态中,`jcr`和`Oak`是两个重要的概念,它们与内容管理系统...通过深入研究这个项目,不仅可以掌握JCR API和Oak的使用,还能了解到如何设计和实现一个高性能的内容管理系统。

    JCR 170 文档

    - **版本控制**:JCR提供了版本化机制,允许对节点进行版本管理,保存历史状态,并支持版本间的回滚和合并。 #### 5. 工作区 - **工作区**:为用户提供独立的操作环境,允许多个用户同时编辑仓库内容,且不会相互...

    jcr-0.7.2.1.tar

    JCR,全称为Java Content Repository(Java内容存储库),是Java世界中用于存储、管理和检索非结构化数据的一种标准接口。它基于JSR-170和JSR-283规范,提供了一种灵活的数据存储模型,适用于各种内容管理系统和文档...

    SCIE与JCR使用指南

    ### SCIE与JCR使用指南 #### 一、SCIE与JCR简介 - **SCIE**(Science Citation Index Expanded)是科学引文索引扩展版,是全球最重要的科学文献索引之一,由美国汤森路透集团维护,提供科技领域内高质量的学术资源...

    Ei、SCI、JCR数据库检索.pdf

    本文将详细介绍Ei、SCI、JCR三个主要的数据库检索系统,分别介绍它们的发展历程、收录范围、数据库特点和使用方法。 一、Ei(Engineering Index) Ei,即 Engineering Index,创办于1884年,由美国工程信息公司...

    jcr_in_action.pdf

    JCR是一种标准接口,用于管理结构化和非结构化的数字内容,如文档、图像和其他媒体文件。它提供了对存储库(repository)的操作,包括存储、检索、搜索、版本控制、事务处理和观察等高级功能。Apache Jackrabbit是...

    JCR.rar_jackrabbit_jcr

    Jackrabbit是Apache软件基金会的一个开源项目,它是一个实现JCR规范的全文搜索和内容管理系统的高性能、可扩展的Java库。在这个"JCR.rar_jackrabbit_jcr"压缩包中,我们主要探讨的是如何使用Jackrabbit进行JCR操作,...

    JCR的2.0版规范

    ### JCR 2.0版规范详解 ...通过定义清晰的数据模型、访问接口和服务,JCR使得开发者能够更容易地管理和操作各种类型的内容。此外,通过标准化查询、导出等功能,JCR还增强了应用之间的互操作性和数据的一致性。

    2018SCI期刊列表影响因子列表下载

    SCI,影响因子Journal Data Filtered By: Selected JCR Year: 2017 Selected Editions: SCIE,SSCI Selected Category Scheme: WoS

    JCR官方说明文档.doc

    - **概述**:JCR提供了一个标准化的接口,用于存储、检索和管理结构化与非结构化内容。 - **命名**:规范了在系统中的命名规则,确保一致性。 - **标识符**:每个项都有唯一的标识符。 - **路径**:通过路径来...

    2018年期刊最新影响因子

    2018年期刊最新影响因子。Journal Data Filtered By: Selected JCR Year: 2017 Selected Editions: SCIE, SSCI Selected Category Scheme: WoS

    JCR用户培训手册

    ### JCR用户培训手册知识点详解 #### 一、JCR简介 **JCR**(Journal Citation Reports)是由ISI...对于图书馆管理者和科研工作者而言,掌握JCR的相关知识将有助于更好地利用这一工具提高工作效率和研究质量。

    二进制漏洞挖掘-栈溢出-开启RELRO1

    二进制漏洞挖掘是安全领域中的重要议题,特别是在Linux环境下,因为系统往往依赖于大量可执行文件和动态链接库。栈溢出是其中最常见的漏洞类型之一,它发生在程序的栈空间上,当程序向栈分配的缓冲区写入的数据超过...

    Leabharlann:为 JCR 存储库提供浏览器界面的 Web 应用程序

    **Leabharlann** 是一个专为 JCR(Java Content Repository)存储库设计的Web应用程序,它提供了直观的浏览器界面,使得用户可以方便地访问和管理存储库中的文件和目录。这个应用的核心目标是简化对JCR内容的交互,...

    jackrabbit内容仓库的实例(两个工程)

    杰克兔(Jackrabbit)是Apache软件基金会的一个开源项目,它是一个完全实现JSR 170(Java Content Repository API,即JCR)规范的内容管理系统(CMS)内核。JCR提供了一种标准的方式来访问和管理半结构化数据,如网页...

    音视频-编解码-面向流媒体协同创作的内容管理关键技术研究.pdf

    JSR-170是Java Content Repository (JCR) API的标准,它定义了访问和管理内容仓库的一套接口,旨在提供统一的内容存储和检索机制。作者通过应用JSR-170,提高了流媒体内容管理的效率和灵活性。 接着,论文设计了一...

    jackrabbit最全入门教程

    JCR是一种标准接口,定义了如何在内容管理系统中存储、检索和管理结构化和非结构化数据。这个“jackrabbit最全入门教程”将会带你深入理解这个强大的内容管理解决方案。 首先,我们需要了解什么是JCR。JCR提供了一...

    modeshape-jcr-api-4.0.0.Alpha3.zip

    3. **查询语言**: JCR支持XPath和SQL-2查询,用于检索仓库中的内容。 4. **版本管理**: 支持对内容的多版本控制,允许用户回滚到先前的状态。 5. **事件系统**: 提供了监听仓库中事件的能力,如内容的创建、修改或...

    jackrabbit-jcr-tests-2.4.1.zip

    Apache Jackrabbit是一个完全实现JCR规范的开源内容存储库,它允许开发人员以结构化和非结构化数据的形式存储和检索信息。 描述中提到的"jbootstrap.zip"是另一个开源工具,它的主要功能是简化Java应用程序的启动...

Global site tag (gtag.js) - Google Analytics