从fileentry到java文件对象的Liferay
任何人都知道如何从从fileentry到java文件对象的Liferay,java,file,liferay,document-library,Java,File,Liferay,Document Library,任何人都知道如何从DLFileEntry(http://docs.liferay.com/portal/6.0/javadocs/com/liferay/portlet/documentlibrary/model/DLFileEntry.html)使用httpservlet 我尝试使用DLFileEntry.getContentStream(),但它没有告诉我错误 com.liferay.portal.security.auth.PrincipalException: PermissionChe
DLFileEntry
(http://docs.liferay.com/portal/6.0/javadocs/com/liferay/portlet/documentlibrary/model/DLFileEntry.html)使用httpservlet
我尝试使用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);
此解决方案的问题是如何获取真正的用户ID,以及如果用户是来宾,该怎么办?
我尝试了Long.parseLong(req.getRemoteUser());但是也会失败。如果您使用的是Liferay 6.1,那么以下代码将为该DLFileEntry获取InputStream
InputStream inputStream = DLFileEntryLocalServiceUtil.getFileAsStream(fileEntry.getUserId(), fileEntry.getFileEntryId(), fileEntry.getVersion());
但是,您收到的错误似乎是由于您在调用服务器之前未使用Liferay进行身份验证
你怎么称呼这个代码
DLFileEntryLocalServiceUtil.getFile(userId, fileEntryId, version, incrementCounter)
给你文件。是否尝试使用此选项?请使用PermissionThreadLocal.getPermissionChecker()获取当前登录用户当前状态下的permissionChecker对象。如果用户是guest,您仍将获得permissionChecker对象
-Felix能否添加有关如何将DLFileEntry委托给FileEntryAdapter的代码?是否尝试通过服务访问此文档库?另外,您使用的是什么版本的Liferay?只有在DocumentLibrary实现支持该文件时,才会提供该文件。我知道S3和JCR不支持此方法,如果您尝试在Liferay 6.1中使用它,将抛出“不支持的操作异常”。嗨,Felix,很抱歉,您的解决方案不起作用,它仍然会给出相同的错误。嗨,Sabrina,我建议您在使用PortletServlet时使用PortletServlet而不是HttpServlet,您将拥有一个portlet上下文,从中您将获得portlet请求、portlet会话和权限检查器部分?在portlet中?运行它的用户是登录的还是来宾?是否正在外部访问?我从未需要使用PermissionCheck来执行上述操作,但它确实需要一个服务上下文来获取DLFileEntry。我创建了一个servlet来下载zip文件,它可以工作,但我需要在代码中设置用户的权限。。我认为这很奇怪。你说的servlet是指Portlet吗?