gpt4 book ai didi

file - 从 JCR 文件节点中取出文件

转载 作者:行者123 更新时间:2023-12-03 22:14:04 24 4
gpt4 key购买 nike

我有以下代码将“rose.gif”插入到roseNode中。但是如何从存储库中检索文件?

    Node roseNode = session.getRootNode().getNode("wiki:encyclopedia/wiki:entry[1]/");

File file = new File("rose.gif");
MimeTable mt = MimeTable.getDefaultTable();
String mimeType = mt.getContentTypeFor(file.getName());
if (mimeType == null) mimeType = "application/octet-stream";

Node fileNode = roseNode.addNode(file.getName(), "nt:file");

System.out.println( fileNode.getName() );

Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty("jcr:mimeType", mimeType);
resNode.setProperty("jcr:encoding", "");
resNode.setProperty("jcr:data", new FileInputStream(file));
Calendar lastModified = Calendar.getInstance();
lastModified.setTimeInMillis(file.lastModified());
resNode.setProperty("jcr:lastModified", lastModified);

//retrieve file and output as rose-out.gif
File outputFile = new File("rose-out.gif");
FileOutputStream out = new FileOutputStream(outputFile);

最佳答案

您真正需要做的唯一一件事是从“nt:file”节点的名称中获取文件的名称,并从“jcr:content”子节点上的“jcr:data”属性中获取文件的内容.

JCR 1.0 和 2.0 在获取二进制“jcr:data”属性值流的方式上略有不同。如果您使用的是 JCR 1.0,那么代码将如下所示:

Node fileNode = // find this somehow
Node jcrContent = fileNode.getNode("jcr:content");
String fileName = fileNode.getName();
InputStream content = jcrContent.getProperty("jcr:data").getStream();

如果您使用的是 JCR 2.0,最后一行有点不同,因为您首先必须从属性值中获取 Binary 对象:
InputStream content = jcrContent.getProperty("jcr:data").getBinary().getStream();

然后,您可以使用标准 Java 流实用程序将“内容”流中的字节写入文件。

完成 Binary 对象后,请务必调用 Binary 的 dispose()方法来告诉信号你已经完成了 Binary 并且实现可以释放 Binary 对象获取的所有资源。您应该始终这样做,即使某些 JCR 实现试图通过返回一个流来捕获编程错误,该流在关闭时将自动调用 dispose()为你。

关于file - 从 JCR 文件节点中取出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com