Aem 以编程方式从CQ5下载图像

Aem 以编程方式从CQ5下载图像,aem,Aem,我试图以编程方式从CQ5下载一个图像。我创建了一个链接,单击该链接时应该下载一个图像。为此,我对servlet进行了ajax调用,因为每当用户单击图像时,我们都会弹出一个“打开并保存”对话框。 这是我在servlet中编写的用于下载图像的代码 **response.setContentType("image/png"); response.setHeader("Content-Disposition", "attachment; filename=icon" + ".png"); URL url

我试图以编程方式从CQ5下载一个图像。我创建了一个链接,单击该链接时应该下载一个图像。为此,我对servlet进行了ajax调用,因为每当用户单击图像时,我们都会弹出一个“打开并保存”对话框。 这是我在servlet中编写的用于下载图像的代码

**response.setContentType("image/png");
response.setHeader("Content-Disposition", "attachment; filename=icon" + ".png");
URL url = new URL("http://somehost:portnmuber/content/dam/image.jpg");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();**
我不断地犯错误。 有没有其他方法可以让我做到这一点


谢谢,提前.

首先,看看LIBS中的下载组件: /libs/foundation/components/download/download.jsp

其次,如果您没有使用CQ5打开会话,默认情况下,它会给您一个401错误。我假设您在为CQ5生成的容器中,或者您只是从另一个域随机访问


请注意,即使是匿名访问,CQ仍将建立匿名会话,并为您提供登录令牌。Anonymous仍然可以有效地进行身份验证,只是不需要用户名和密码。

由于未设置DAM的匿名用户权限,您将遇到401错误。 首先,您应该为节点“/content/dam”的“匿名”用户授予访问权限。 您可以从以下页面执行此操作:
“http://somehost:portnuber/useradmin“
。双击用户“匿名”并转到“权限”选项卡(在窗口右侧)。检查“dam”节点的读取权限

其次,转到系统控制台的组件选项卡(
http://somehost:portnmuber/system/console/components
)并查找org.apache.sling.engine.impl.auth.SlingAuthenticator组件。单击“配置”按钮。在组件配置中,选中“允许匿名访问”,然后按“保存”


应该可以工作。

CQ5使用会话,因此从路径下载需要作者实例的用户名/密码,例如
curl-u username:passwordhttp://someserver.com:4502/etc/packages/my_packages/package.zip -o localpath/package.zip
将根据有权阅读的人下载包。对于图像,您需要像
http://someserver.com:4502/content/dam/640x960.jpg
获取图像,但需要添加
/jcr:content/renderations/original
获取原始图像,例如
http://someserver.com:4502/content/dam/640x960.jpg/jcr:content/renditions/original
。您还可以更改图像路径以获取图像的特定格式副本,例如
http://someserver.com:4502/content/dam/640x960.jpg/jcr:content/renditions/cq5dam.thumbnail.140.100.png
获取140x100版本的图像。

我在尝试将图像从AEM下载到iOS设备时遇到类似问题。事实证明AEM(至少是我正在访问的实例)需要一个referer头;如果缺席,请求将被拒绝。问题并没有在模拟器上显现出来,只是在真实设备上。这就成功了:

**response.setContentType("image/png");
response.setHeader("Content-Disposition", "attachment; filename=icon" + ".png");
URL url = new URL("http://somehost:portnmuber/content/dam/image.jpg");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();**
[request setValue: @"https://www.example.com/" forHTTPHeaderField: @"Referer"];