AEM:使用JavaScript Use-API访问DAM中的JS文件

问题描述 投票:0回答:2

我在DAM中有一个特定的JS文件,其中包含JSON。我想使用Sightly中的JavaScript USE API的任何方法在辅助JS中访问该文件。我知道可以很容易地使用Java来完成此操作,但是我想以一种不想接触任何Java代码的方式来完成它。

我尝试了以下操作。但是之后,输入流将无法转换为流数据。

request.resourceResolver.getResource("/path/to/dam/file.js");

AND

request.resourceResolver.getResource("/path/to/dam/file.js").adaptTo(com.adobe.granite.asset.api.Asset);
javascript aem sightly
2个回答
0
投票

我不确定是否有纯粹的JS Use API方法可以执行此操作。但是,由于JS Use API允许您使用其中的Java类和方法,因此您应该能够使用它们来获取信息。

由于您的文件作为资产存储在DAM中,因此您需要从原始格式中访问数据。一种实现方法是使用com.day.cq.dam.api.Asset API获取原始格式。 com.adobe.granite.asset.api.Asset没有直接访问原始格式的方法,因此使用了另一个格式。

工作示例custom.js

use(function (data) { 
    var asset = request.resourceResolver.getResource("/content/dam/we-retail/en/data.js").adaptTo(com.day.cq.dam.api.Asset);
    var is = asset.getOriginal().adaptTo(java.io.InputStream);
    var jsonData = JSON.parse(org.apache.commons.io.IOUtils.toString(is, "UTF-8"));
    console.log(jsonData);
    return jsonData;
});

DAM中文件的内容

{
    "fname": "abc",
    "lname": "xyz"
}

HTL文件

<sly data-sly-use.custom="custom.js">
    ${custom.fname} --> ${custom.lname}
</sly>

0
投票

我看到了刚才发布的答案。但是在看到这个之前,我使用了另一种类似的方法。

这里。它与答案非常相似,但有更多步骤。

asset = request.resourceResolver.getResource(jsonPath).adaptTo(com.day.cq.dam.api.Asset);
rend = asset.getOriginal().adaptTo(com.day.cq.dam.api.Rendition);

或直接

rend= request.resourceResolver.getResource(jsonPath+"/jcr:content/renditions/original").adaptTo(com.day.cq.dam.api.Rendition);
inputStream = rend.adaptTo(java.io.InputStream);
var is;
var c = '';
var flag = false;
try {
// reads till the end of the stream
while ((is = inputStream.read()) != -1) {
      c = c + String.fromCharCode(is);
}

 } catch (e) {
   // if any I/O error occurs
   log.debug("Input Stream Error " + e)
 }
© www.soinside.com 2019 - 2024. All rights reserved.