AEM: доступ к файлу JS в DAM с использованием JavaScript Use-API - PullRequest
1 голос
/ 08 октября 2019

У меня есть определенный JS-файл в DAM, который содержит JSON. Я хотел бы получить доступ к этому файлу во вспомогательном JS, используя любые методы JavaScript USE API в Sightly. Я знаю, что это можно сделать с помощью 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);

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Я не уверен, существуют ли чистые методы JS Use API, которые позволяют вам это делать. Однако, поскольку API использования JS позволяет использовать в нем классы и методы 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 голосов
/ 09 октября 2019

Я видел ответ, опубликованный только сейчас. Но я использовал другой подобный метод, прежде чем я увидел это.

Вот оно. Это очень похоже на ответ, но с несколькими дополнительными шагами.

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)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...