任何人都知道如何使用DLFileEntry
(http://docs.liferay.com/portal/6.0/javadocs/com/liferay/portlet/documentlibrary/model/DLFileEntry.html)检索contentStream的HttpServlet?
我尝试使用DLFileEntry.getContentStream()
,但它没有给我错误
com.liferay.portal.security.auth.PrincipalException: PermissionChecker not initialized
我解决了部分问题设置硬编码我的userId:
long userId=2
PrincipalThreadLocal.setName(userId);
User user = UserLocalServiceUtil.getUserById(userId);
PermissionChecker permissionChecker;
permissionChecker = PermissionCheckerFactoryUtil.create(user, false);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
此解决方案的问题是如何获取真实的userId,以及如果用户是来宾会发生什么情况?
我试过Long.parseLong(req.getRemoteUser());但也失败了。
答案 0 :(得分:3)
DLFileEntryLocalServiceUtil.getFile(userId, fileEntryId, version, incrementCounter)
为您提供文件。你尝试过这个吗?
答案 1 :(得分:0)
如果你正在使用Liferay 6.1,那么下面的代码将为你提供一个用于那个DLFileEntry的InputStream。
InputStream inputStream = DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getUserId(), fileEntry.getFileEntryId(), fileEntry.getVersion());
你得到的错误似乎是因为你在调用服务器之前没有使用Liferay进行身份验证。
您如何调用此代码?
答案 2 :(得分:0)
请使用PermissionThreadLocal.getPermissionChecker()以当前状态获取当前登录用户的permissionChecker对象。如果用户是访客,您仍然会获得permissionChecker对象。
-Felix