有人知道如何使用httpservlet从DLFileEntry
(http://docs.liferay.com/portal/6.0/javadocs/com/liferay/portlet/documentlibrary/model/DLFileEntry.html)检索contentStream吗?
我尝试使用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());但也失败了。
DLFileEntryLocalServiceUtil.getFile(userId, fileEntryId, version, incrementCounter)
给你文件。你试过用这个吗?
使用的是Liferay 6.1,那么以下代码将为您提供该DLFileEntry的InputStream。
InputStream inputStream = DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getUserId(), fileEntry.getFileEntryId(), fileEntry.getVersion());
无论您得到的错误如何,似乎是由于您在调用服务器之前未使用Liferay进行身份验证。
您如何调用此代码?
请使用 PermissionThreadLocal.getPermissionChecker() 获取当前登录用户的当前状态的 permissionChecker 对象。如果用户是来宾,您仍将获得权限检查器对象。
-费利克斯