Liferay从fileentry到java文件对象

时间:2012-05-29 21:17:10

标签: java file liferay document-library

任何人都知道如何使用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());但也失败了。

3 个答案:

答案 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