AEM 资产有没有办法通过在 java 的工作流程中创建文件夹来移动文件

AEM asset Is there any way to move a file by creating a folder in a workflow in java

我想通过仅使用 java.I 中的工作流程创建一个新文件夹来移动少量资产,不想手动创建文件夹然后移动资产,因为有 10000 多个资产要移动到不同的文件夹。

如果您正在考虑使用工作流创建文件夹 - AEM 中的文件夹不过是 jcr:primaryType 的节点 sling:Foldersling:OrderedFolder。如果你的classpath中有com.day.cq.commons.jcrcreatePath method会帮你创建一个节点,如果它不存在的话。

您也可以使用 addNode 方法,然后使用 javax.jcr.Node api 中的 setProperty 方法来创建适当主要类型的文件夹。

将资产移动到这个新创建的节点(文件夹),可以在此之后进行。您可以使用 javax.jcr.WorkSpace 中的 clone method,它具有删除现有节点的选项。


还有另一种直接的资产转移方式。 我建议您使用内置 com.adobe.granite.asset.api.AssetManager api 对 DAM 资产执行 CRUD 操作。

session = resourceResolver.adaptTo(Session.class);  
String assetPath = "/content/dam/folderA/asset1.jpg";
String movePath = "/content/dam/folderB/asset1.jpg";
assetManager.moveAsset(assetPath, copyPath);

session.save()
session.logout()

AssetManager 的更多参考资料API。

HelpX Article

API Details

如果没有适当的索引,移动大量资产可能会导致移动操作失败。监视日志中的警告消息,例如 The query read or traversed more than X nodes.。您可能需要将基于 oak 的属性添加到开箱即用的 /oak:index/ntBaseLucene 索引中以解决此问题。

更多详情here