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