以编程方式从CQ5下载图像

时间:2014-04-10 11:09:27

标签: cq5

我正在尝试以编程方式从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错误。 还有其他方法可以做到这一点。

提前谢谢。

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

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

应该工作。

答案 2 :(得分: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版本。

答案 3 :(得分:0)

我尝试将图像从AEM下载到iOS设备时遇到类似的问题。事实证明,AEM(至少在我遇到的实例中)需要引用标头。如果不存在,则请求被拒绝。该问题并没有在模拟器中浮出水面,只是在真实设备中才出现。这可以达到目的:

[request setValue: @"https://www.example.com/" forHTTPHeaderField: @"Referer"];