我的开源应用程序下载了一个Alfresco文件夹的文件(由CMIS)。
算法很简单:
- 用folder . getchildren()列出文件夹内容
- 使用Document.getContentStream()下载
它可以正常工作,除了包含文件的工作副本的文件夹,在这种情况下,Alfresco说:
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException: Stream id is invalid: workspace://SpacesStore/8b9a58ba-652f-4a18-8d26-aba06df98d25;pwc
at org.alfresco.opencmis.CMISConnector.getContentStream(CMISConnector.java:1199)
at org.alfresco.opencmis.AlfrescoCmisServiceImpl.getContentStream(AlfrescoCmisServiceImpl.java:1795)
at sun.reflect.GeneratedMethodAccessor700.invoke(Unknown Source)
;pwc
可能是指"Private Working Copy",这是CMIS协议中的一个特例。当Alfresco Share用户在文档上点击"离线编辑"(即签出/签入)时,创建工作副本。
我的算法有缺陷吗?或者它可能是Alfresco/OpenCMIS中的一个bug ?
我不确定细节,因为您没有在这里粘贴触发异常的代码,也没有提到您使用的是哪个化学版本。无论如何,如果我在CMIS工作台v0.8.0中运行以下groovy代码,它将成功打印所有文件内容:
def obj = session.getObjectByPath("/cc");
def children = obj.getChildren();
for (doc in children) {
def s = doc.getContentStream();
def i = s.getStream();
println(i.text);
}
上面使用的cc
文件夹是我在Alfresco CMIS实例中创建的文件夹,我在其中放置了一个文件并将其签出以创建PWC。我假设你的代码有一些问题,因为上面的代码使用了相同的API。