以编程方式从CQ5下载图像

问题描述 投票:3回答:4

我正在尝试以编程方式从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();**

我不断收到401错误。还有其他方法可以做到这一点。

提前致谢。

cq5
4个回答
5
投票

首先,看一下基础库中的下载组件:/libs/foundation/components/download/download.jsp

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

请注意,即使对于匿名访问,CQ仍将建立匿名会话,并为您提供登录令牌。匿名有效地仍然经过身份验证,无需用户名和密码。


1
投票

您是gettin 401错误,因为未设置DAM的匿名用户权限。首先,您应该为节点'/ content / dam'的'匿名'用户授予访问权限。你可以从页面上这样做:"http://somehost:portnuber/useradmin"。 Doble单击用户'anonymous'并转到选项卡'permissions'(在右侧窗口中)。检查'dam'节点的读权限。

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

应该管用。


0
投票

CQ5使用会话,因此从路径下载需要作者实例上的用户名/密码,例如curl -u username:password http://someserver.com:4502/etc/packages/my_packages/package.zip -o localpath/package.zip将根据有权阅读它的人下载包。对于图像,您需要像http://someserver.com:4502/content/dam/640x960.jpg这样的图像路径来获取图像,但是您需要添加/jcr:content/renditions/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版本。


0
投票

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

[request setValue: @"https://www.example.com/" forHTTPHeaderField: @"Referer"];
© www.soinside.com 2019 - 2024. All rights reserved.