В эпоху цифровых технологий изображения играют решающую роль в привлечении пользователей и эффективной передаче информации. Если вы работаете с Adobe Experience Manager (AEM), могут возникнуть случаи, когда вам потребуется загружать и сохранять изображения программным способом. В этой записи блога мы рассмотрим пять практических методов выполнения этой задачи и попутно предоставим вам примеры кода.
Метод 1. Использование Apache Sling API
Один из наиболее распространенных и эффективных способов программной загрузки и сохранения изображений в AEM — использование Apache Sling API. Следующий фрагмент кода демонстрирует, как этого добиться:
String imageUrl = "https://example.com/image.jpg";
String destinationPath = "/content/myproject/images/image.jpg";
ResourceResolver resourceResolver = resolverFactory.getServiceResourceResolver(null);
Resource imageResource = resourceResolver.getResource(imageUrl);
Resource destinationResource = resourceResolver.getResource(destinationPath);
InputStream imageInputStream = imageResource.adaptTo(InputStream.class);
ResourceUtil.getOrCreateResource(resourceResolver, destinationPath, "nt:file", "nt:folder", true);
ResourceUtil.getOrCreateResource(resourceResolver, destinationPath + "/jcr:content", "nt:file", "nt:unstructured", true);
Node destinationNode = destinationResource.adaptTo(Node.class);
Binary binary = resourceResolver.adaptTo(Binary.class);
binary = resourceResolver.getResource(imageUrl).adaptTo(Binary.class);
destinationNode.setProperty("jcr:data", binary);
destinationNode.setProperty("jcr:mimeType", "image/jpeg");
destinationNode.setProperty("jcr:lastModified", Calendar.getInstance());
resourceResolver.commit();
Метод 2: использование Java IO
Другой простой подход — использование классов Java IO для программной загрузки и сохранения изображений. Вот пример:
String imageUrl = "https://example.com/image.jpg";
String destinationPath = "/content/myproject/images/image.jpg";
URL url = new URL(imageUrl);
InputStream inputStream = url.openStream();
OutputStream outputStream = new FileOutputStream(destinationPath);
byte[] buffer = new byte[2048];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
Метод 3: использование Apache HttpClient
Если вы предпочитаете более надежное решение, вы можете использовать библиотеку Apache HttpClient для программной загрузки и сохранения изображений. Вот пример:
String imageUrl = "https://example.com/image.jpg";
String destinationPath = "/content/myproject/images/image.jpg";
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(imageUrl);
CloseableHttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
OutputStream outputStream = new FileOutputStream(destinationPath);
byte[] buffer = new byte[2048];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
httpClient.close();
Метод 4. Использование AEM Asset API
Для более интегрированного подхода в экосистеме AEM вы можете использовать AEM Asset API. Вот пример:
String imageUrl = "https://example.com/image.jpg";
String destinationPath = "/content/myproject/images/image.jpg";
Session session = resourceResolver.adaptTo(Session.class);
AssetManager assetManager = session.getWorkspace().getAssetManager();
assetManager.createAsset(destinationPath, new URL(imageUrl).openStream(), "image/jpeg", true);
Метод 5: использование Apache Commons IO
Наконец, вы можете использовать библиотеку Apache Commons IO, которая предоставляет удобные методы загрузки и сохранения изображений. Вот пример:
String imageUrl = "https://example.com/image.jpg";
String destinationPath = "/content/myproject/images/image.jpg";
FileUtils.copyURLToFile(new URL(imageUrl), new File(destinationPath));
В этой статье мы рассмотрели пять эффективных методов программного скачивания и сохранения изображений в AEM. Предпочитаете ли вы использовать Apache Sling API, классы Java IO, Apache HttpClient, AEM Asset API или Apache Commons IO, у вас есть множество вариантов выбора в зависимости от ваших конкретных требований. Включив эти методы в свои проекты AEM, вы сможете автоматизировать задачи загрузки изображений и повысить эффективность своих рабочих процессов.