3

DLFileEntryhttpservlet を使用して (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()); を試しました しかし、また失敗します。

4

3 に答える 3

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

あなたにファイルを与えます。これを使ってみましたか?

于 2012-05-30T09:48:01.973 に答える
0

Liferay 6.1 を使用している場合、次のコードは That DLFileEntry の InputStream を取得します。

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

あなたが得ているエラーは、サーバーにこの呼び出しを行う前にLiferayで認証していないことが原因のようです。

このコードをどのように呼んでいますか?

于 2012-05-30T07:14:36.293 に答える
0

PermissionThreadLocal.getPermissionChecker() を使用して、現在ログインしているユーザーの現在の状態の permissionChecker オブジェクトを取得してください。ユーザーがゲストの場合でも、permissionChecker オブジェクトを取得します。

-フェリックス

于 2012-05-31T11:43:56.307 に答える