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:Folder
或 sling:OrderedFolder
。如果你的classpath中有com.day.cq.commons.jcr
,createPath
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。
如果没有适当的索引,移动大量资产可能会导致移动操作失败。监视日志中的警告消息,例如 The query read or traversed more than X nodes.
。您可能需要将基于 oak 的属性添加到开箱即用的 /oak:index/ntBaseLucene
索引中以解决此问题。
更多详情here。
我想通过仅使用 java.I 中的工作流程创建一个新文件夹来移动少量资产,不想手动创建文件夹然后移动资产,因为有 10000 多个资产要移动到不同的文件夹。
如果您正在考虑使用工作流创建文件夹 - AEM 中的文件夹不过是 jcr:primaryType
的节点 sling:Folder
或 sling:OrderedFolder
。如果你的classpath中有com.day.cq.commons.jcr
,createPath
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。
如果没有适当的索引,移动大量资产可能会导致移动操作失败。监视日志中的警告消息,例如 The query read or traversed more than X nodes.
。您可能需要将基于 oak 的属性添加到开箱即用的 /oak:index/ntBaseLucene
索引中以解决此问题。
更多详情here。