3

Liferay ポートレットを開発するとき、ファイル アーティファクトを使用したい場合があります。たとえば、構成可能なイメージや、ユーザーがカスタム サービス エンティティにファイルを添付できる手段が必要になる場合があります。

この問題に対処する API が Liferay に組み込まれています。それぞれの使い方は?

4

1 に答える 1

5

以下は、ファイルを保存および取得するために私が考えることができる3つの方法です。


方法-1

ストレージ:質問で示したように を
使用する方法。DLStoreUtil

取得:
このためには、ファイルをストリームとして取得し、次のコードを使用してブラウザーに送信する必要があります。

String path = fileName;
// if there is a directory then path would be
// String path = "mydirectory/mySubDirectory/" + fileName; // mydirectory/mySubDirectory/my_File_image_name.png

InputStream inputStream = DLStoreUtil.getFileAsStream(companyId(), CompanyConstants.SYSTEM, path);

long contentLength = DLStoreUtil.getFileSize(companyId(), CompanyConstants.SYSTEM, path);

String contentType = MimeTypesUtil.getContentType(fileName);

ServletResponseUtil.sendFile(request, response, fileName, inputStream, contentLength, contentType);

Message BoardsLiferay は、ポートレットの添付ファイルをダウンロードするために上記の方法を使用します。ここでソースコードをチェックアウトできます。私はこれを試したことはありませんがserveResource、ポートレットのメソッドにこのコードを記述resourceURLし、URL として を提供してダウンロードするか、<img>タグで使用できると思います。


方法-2: 使用DLAppService

この方法を使用すると、テーブルにこのファイルのデータベース エントリが作成され、ポートレットDLFileEntryにもファイルが表示されます。Documents & Media

ストレージ:
ファイルを追加するコード例:

FileEntry = DLAppServiceUtil.addFileEntry(repositoryId, folderId, sourceFileName, mimeType, title, description, changeLog, bytes, serviceContext);

ここで他のメソッドとクラスをチェックアウトできます。

取得:
これは、この回答で説明されているとおりです。


方法-3: 使用ImageLocalService(特に画像用)

この方法では、後で画像を取得できるように ImageID をどこかに保存する必要があります。

ストレージ:
以下は、liferay で画像を追加/更新する方法です。

// to Add an image
long imageID = 0;
imageID = CounterLocalServiceUtil.increment();
ImageLocalServiceUtil.updateImage(imageID, bytes);

// to update the same image, pass the existing Image ID
ImageLocalServiceUtil.updateImage(existingImageID, bytes);

検索:

JSP に次のコードを記述できます。

<img alt="My Image"
     id="myImgID"
     title="This my image stored in liferay"
     src="<%=themeDisplay.getPathImage()%>/any_string_will_do_?img_id=<%=myImageId%>&img_timestamp=<%=someTimestampOrRandomString %>" />

注: img_timestamp=<%=someTimestampOrRandomString %>"、この文字列はオプションのパラメーターであり、スキップできます。
これは、ページが更新されるたびにブラウザがブラウザのキャッシュからではなく、サーバーから画像を取得するために使用されます。

お役に立てれば。

于 2012-10-17T05:56:42.190 に答える