Liferay from fileentry to java file object



有人知道如何使用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 对象。如果用户是来宾,您仍将获得权限检查器对象。

-费利克斯