3

任何人都知道如何DLFileEntry使用 httpservlet 从 (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

我部分解决了设置硬编码我的用户 ID 的问题:

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()); 但也失败了。

4

3 回答 3

3
DLFileEntryLocalServiceUtil.getFile(userId, fileEntryId, version, incrementCounter) 

给你文件。你试过用这个吗?

于 2012-05-30T09:48:01.973 回答
0

如果您使用的是 Liferay 6.1,那么以下代码将为您提供该 DLFileEntry 的 InputStream。

InputStream inputStream = DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getUserId(), fileEntry.getFileEntryId(), fileEntry.getVersion());

但是,您遇到的错误似乎是由于您在调用服务器之前没有使用 Liferay 进行身份验证。

你怎么称呼这段代码?

于 2012-05-30T07:14:36.293 回答
0

请使用 PermissionThreadLocal.getPermissionChecker() 获取当前登录用户当前状态的权限检查器对象。如果用户是访客,您仍然会获得 permissionChecker 对象。

-菲利克斯

于 2012-05-31T11:43:56.307 回答