Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从fileentry到java文件对象的Liferay_Java_File_Liferay_Document Library - Fatal编程技术网

从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吗?