Base64 エンコードされたファイルでオブジェクト API を使用する
Liferay DXP 2024.Q2+/ポータル GA120+
API を通じて 添付フィールド を持つオブジェクト エントリを作成する場合、通常はコンピューターからファイルをアップロードするか、 ドキュメントとメディア アプリケーションにアップロードされたファイルを使用できます。 どちらのシナリオでも複数の手順が必要です。
API 経由でオブジェクト エントリを投稿するときにドキュメントをアップロードして ID または外部参照コード (ERC) を指定するか、API 経由でオブジェクト エントリを投稿し、後で UI を通じてファイルを添付することができます。
あるいは、POST リクエストを作成し、リクエスト本文に Base64 でエンコードされたファイルを含めることで、添付ファイル付きのオブジェクト エントリを 1 ステップで投稿することもできます。
Liferay DXP 2024.Q4+/Portal GA129+ オブジェクトフレームワークは、ERCを使用して添付ファイルをオブジェクトエントリにリンクし、環境間で一貫した参照を可能にします。 ユーザーが直接アップロードし、ドキュメントとメディアから非表示になっている添付ファイルの場合、インポート時に簡単に利用できるように、添付ファイルの内容を Base64 形式でエクスポートされたデータに含めることができます。 詳細については、 オブジェクトのエクスポートとインポート を参照してください。
続行する前に、 新しい Liferay DXP/Portal 7.4 インスタンスをセットアップ し、提供されているチュートリアル コードを 準備 してください。
Liferayインスタンスのセットアップ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
このチュートリアルの基本オブジェクトを 作成 するには、次の手順に従ってください。
-
グローバル メニュー (
) を開き、 コントロール パネル タブに移動して、 オブジェクトをクリックします。 -
追加 ボタン (
) をクリックし、次の値を入力します。項目 値 ラベル できる 複数形のラベル エイブルズ 名前 できる -
新しい オブジェクト ドラフトを選択し、 フィールド タブに移動して、次のフィールドを追加します。
ラベル 項目名 種類 ファイルをリクエスト ユーザーコンピュータ添付ファイル1 ユーザーコンピュータ添付ファイル1 添付ファイル Upload Directly from the User's Computerユーザーコンピュータ添付ファイル2 ユーザーコンピュータ添付ファイル2 添付ファイル ユーザーのコンピュータから直接アップロード(ドキュメントとメディア内のファイルを表示オプションを切り替えます)ドキュメントとメディアの添付ファイル ドキュメントとメディアの添付ファイル 添付ファイル Upload or Select from Documents and Media Item Selectorあるいは、
ObjectDefinitions_POST_ToInstance.shを実行してオブジェクト定義を作成します。 その後、 グローバル メニュー → コントロール パネル → オブジェクト でオブジェクト定義にアクセスし、次の手順に進みます。./ObjectDefinitions_POST_ToInstance.sh -
詳細タブで、スコープとして 会社 を選択し、パネル リンクの下の オブジェクト を選択して、 公開をクリックします。
重要このチュートリアルでは、上記の値を使用する必要があります。
公開されると、API 経由でオブジェクトにアクセスできるようになります。
サンプルコードを準備する
以下のコマンドを実行して、提供されたサンプルコードをダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-p7x7.zip -O
unzip liferay-p7x7.zip
これらのスクリプトには、以下のAPIが含まれています。
| HTTP メソッド | HTTPエンドポイント | 説明 |
|---|---|---|
| GET | / | Liferay インスタンス内のオブジェクト エントリの完全なリストを返します。結果はページ分割、フィルタリング、検索、並べ替えが可能です。 |
| POST | / | API 呼び出しで提供された詳細を使用してオブジェクト エントリを作成します。 |
| PUT | /[objectNameId] | 指定されたオブジェクトエントリーの詳細を、API呼び出しで提供されたものに置き換えます |
| DELETE | /[objectNameId] | 指定されたオブジェクトエントリーを削除し、操作が成功した場合は204を返します |
-
サンプルコードをダウンロードしたら、
liferay-p7x7プロジェクトのcurlフォルダに移動します。cd liferay-p7x7/curl
ユーザーのコンピュータから直接アップロードされた添付ファイルを投稿する
ユーザーのコンピュータから直接アップロード ファイルのリクエストオプションを使用して添付ファイル付きのオブジェクトエントリを作成するには、
-
Ables_POST_FromUsersComputer1.shを実行します。 これにより、Base64 ファイルが添付されたオブジェクト エントリが作成されます。./Ables_POST_FromUsersComputer1.shfileBase64パラメータを使用して、ファイルをオブジェクト エントリに添付します。... --data-raw '{ "externalReferenceCode": "ATTACHMENT_FROM_USERS_COMPUTER_1", "usersComputerAttachment1": { "fileBase64": "iVB0...gg==", "name": "AttachmentFromUsersComputer1.png" } ...端末には同様の出力が表示されます。
{ "actions": { "permissions": { "method": "GET", "href": "http://localhost:8080/o/c/ables/32268/permissions" }, "get": { "method": "GET", "href": "http://localhost:8080/o/c/ables/32268" }, "replace": { "method": "PUT", "href": "http://localhost:8080/o/c/ables/32268" }, "update": { "method": "PATCH", "href": "http://localhost:8080/o/c/ables/32268" }, "delete": { "method": "DELETE", "href": "http://localhost:8080/o/c/ables/32268" } }, "creator": { "additionalName": "", "contentType": "UserAccount", "familyName": "Test", "givenName": "Test", "id": 20122, "name": "Test Test" }, "dateCreated": "2024-06-05T16:37:26Z", "dateModified": "2024-06-05T16:37:26Z", "externalReferenceCode": "ATTACHMENT_FROM_USERS_COMPUTER_1", "id": 32268, "keywords": [], "status": { "code": 0, "label": "approved", "label_i18n": "Approved" }, "taxonomyCategoryBriefs": [], "usersComputerAttachment1": { "id": 32263, "link": { "href": "/documents/32260/32262/AttachmentFromUsersComputer1.png/f0a02e6a-8eeb-d021-bfdd-82da1afab1cf?version=1.0&t=1717605446526&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1", "label": "AttachmentFromUsersComputer1.png" }, "name": "AttachmentFromUsersComputer1.png" } }デフォルトでは、応答に
fileBase64エンコーディングが含まれていないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。
Ables_POST_FromUsersComputer2.sh を実行し、 ユーザーのコンピューターから直接アップロード ファイルの要求オプションと ドキュメントとメディア内のファイルを表示 オプションをオンにして、添付ファイル付きのオブジェクト エントリを作成します。 なお、フォルダの指定は不要です。 フォルダーの選択は、会社スコープのオブジェクト定義の場合は会社に基づいて、サイトスコープのオブジェクト定義の場合はサイトに基づいて自動的に行われます。
./Ables_POST_FromUsersComputer2.sh
ドキュメントとメディアアイテムセレクターからアップロードまたは選択した添付ファイルを投稿する
-
DocumentFolders_POST_ToSite.shを実行して、アップロードされたファイルを保存するフォルダーを作成します。 サイト ID をパラメータとして使用します。 この例では、サイトIDは20117です。ヒントサイト ID は、プラットフォームの サイト メニュー (
) → 構成 → サイト設定 → サイト構成 で見つけます。./DocumentFolders_POST_ToSite.sh [site-id]端末には同様の出力が表示されるはずです。
{ "actions" : { "subscribe" : { "method" : "PUT", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258/subscribe" }, "unsubscribe" : { "method" : "PUT", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258/unsubscribe" }, "get" : { "method" : "GET", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258" }, "replace" : { "method" : "PUT", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258" }, "update" : { "method" : "PATCH", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258" }, "delete" : { "method" : "DELETE", "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258" } }, "creator" : { "additionalName" : "", "contentType" : "UserAccount", "familyName" : "Test", "givenName" : "Test", "id" : 20122, "name" : "Test Test" }, "customFields" : [ ], "dateCreated" : "2024-06-05T16:37:12Z", "dateModified" : "2024-06-05T16:37:12Z", "description" : "This folder stores the attachment files for this exercise.", "externalReferenceCode" : "ABLE_FOLDER", "id" : 32258, "name" : "Able Folder", "numberOfDocumentFolders" : 0, "numberOfDocuments" : 0, "siteId" : 20117, "subscribed" : false } -
Ables_POST_FromDocumentsAndMedia.shを実行します。 これにより、Base64 ファイルが添付されたオブジェクト エントリが作成され、最近作成されたフォルダーに配置されます。 フォルダーの ERC とサイト ID をパラメーターとして使用します。 この例では、ERC はABLE_FOLDER、サイト ID は20117です。./Ables_POST_FromDocumentsAndMedia.sh [ERC] [site-id]フォルダーパラメーターを使用して、externalReferenceCodeとsiteIdを追加し、ドキュメントを保存します。... "folder": { "externalReferenceCode": "'${1}'", "siteId": "'${2}'" }, ...注siteIdまたはERCが含まれていないか、null または空である場合でも、POST リクエストは機能し、ファイルはデフォルトのサイトのルート フォルダーにアップロードされます。端末には同様の出力が表示されるはずです。
{ "actions" : { "permissions" : { "method" : "GET", "href" : "http://localhost:8080/o/c/ables/32337/permissions" }, "get" : { "method" : "GET", "href" : "http://localhost:8080/o/c/ables/32337" }, "replace" : { "method" : "PUT", "href" : "http://localhost:8080/o/c/ables/32337" }, "update" : { "method" : "PATCH", "href" : "http://localhost:8080/o/c/ables/32337" }, "delete" : { "method" : "DELETE", "href" : "http://localhost:8080/o/c/ables/32337" } }, "creator" : { "additionalName" : "", "contentType" : "UserAccount", "familyName" : "Test", "givenName" : "Test", "id" : 20122, "name" : "Test Test" }, "dateCreated" : "2024-06-05T16:37:36Z", "dateModified" : "2024-06-05T16:37:36Z", "externalReferenceCode" : "ATTACHMENT_FROM_DOCS_AND_MEDIA", "id" : 32337, "keywords" : [ ], "status" : { "code" : 0, "label" : "approved", "label_i18n" : "Approved" }, "taxonomyCategoryBriefs" : [ ], "docsAndMediaAttachment" : { "id" : 32332, "link" : { "href" : "/documents/20119/0/AttachmentFromDocumentsAndMedia.png/bbe75f48-04ce-2967-1721-973655b9a853?version=1.0&t=1717605455991&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_DOCS_AND_MEDIA", "label" : "AttachmentFromDocumentsAndMedia.png" }, "name" : "AttachmentFromDocumentsAndMedia.png" } }注宛先フォルダーに既存のファイルと同じ名前のファイルをアップロードすると、新しいファイルの名前が括弧で囲まれた一意の連番に変更されます (つまり、
名前 (n).拡張子)。デフォルトでは、応答に
fileBase64エンコーディングが含まれていないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。
すべてのエントリのリストを取得する
-
すべてのエントリのリストを取得するには、
Ables_GET_FromCompany.shを実行します。./Ables_GET_FromCompany.sh応答には、添付ファイルの
ID、ダウンロードできるリンク、ラベル、名前などの情報が含まれます。... "dateCreated" : "2024-06-05T16:37:26Z", "dateModified" : "2024-06-05T16:37:26Z", "externalReferenceCode" : "ATTACHMENT_FROM_USERS_COMPUTER_1", "id" : 32268, "keywords" : [ ], "status" : { "code" : 0, "label" : "approved", "label_i18n" : "Approved" }, "taxonomyCategoryBriefs" : [ ], "usersComputerAttachment1" : { "id" : 32263, "link" : { "href" : "/documents/32260/32262/AttachmentFromUsersComputer1.png/f0a02e6a-8eeb-d021-bfdd-82da1afab1cf?version=1.0&t=1717605446526&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1", "label" : "AttachmentFromUsersComputer1.png" }, "name" : "AttachmentFromUsersComputer1.png" } ...応答にはファイルのアドレスが含まれますが、デフォルトでは
fileBase64エンコーディングは含まれないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。
添付ファイルによるオブジェクトエントリの更新
PUT リクエストを使用して、オブジェクト エントリ全体を API 呼び出しで提供された詳細に置き換えます。 この場合、オブジェクト エントリを POST するために使用したのと同じ構造を PUT リクエストで使用し、更新する特定のフィールドを変更する必要があります。
同様に、PATCH リクエストには構造内で変更される特定のフィールドのみが含まれますが、PATCH の構造とコンテンツが作成時に使用されたものと一致することも確認する必要があります。
PUTリクエストを使用してエントリを変更するには、
-
Ables_PUT_ById.shを実行して、外部参照コードとオブジェクトエントリに添付されたファイルの名前を変更します。 オブジェクト エントリ ID をパラメーターとして使用します。この例では、 GET リクエスト で取得された
ATTACHMENT_FROM_USERS_COMPUTER_1エントリの ID は32268です。./Ables_PUT_ById.sh [Object-ID]応答には、オブジェクト エントリの更新された情報が表示されます。 応答にはファイルのアドレスが含まれますが、デフォルトでは
fileBase64エンコーディングは含まれないことに注意してください。 詳細については、「 レスポンスで添付ファイルの内容を取得する 」を参照してください。 -
外部参照コードは
ATTACHMENT_FROM_USERS_COMPUTER_1_ALTEREDになり、画像の名前はAttachmentFromUsersComputer1Altered.pngになります。"dateCreated" : "2024-06-05T16:37:26Z", "dateModified" : "2024-06-05T16:38:11Z", "externalReferenceCode" : "ATTACHMENT_FROM_USERS_COMPUTER_1_ALTERED", ... "link" : { "href" : "/documents/32260/32262/AttachmentFromUsersComputer1Altered.png/da5fe5a1-c36c-e016-846e-20720b7469a8?version=1.0&t=1717605491796&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_1_ALTERED", "label" : "AttachmentFromUsersComputer1Altered.png" }, "name" : "AttachmentFromUsersComputer1Altered.png" }
添付ファイル付きのオブジェクトエントリの削除
-
Ables_DELETE_ById.shを実行して、オブジェクト エントリとその添付ファイルを削除します。 オブジェクト エントリ ID をパラメーターとして使用します。./Ables_DELETE_ById.sh [Object-ID] -
応答に内容がありません。
レスポンスで添付ファイルの内容を取得する
応答で Base64 でエンコードされたファイルを取得するには、 nestedFields=[fieldName].fileBase64 クエリ パラメータを使用して、ネストされたフィールドとしてファイルを要求する必要があります。 これにより、ユーザーが要求していない場合は Base64 エンコードの計算が回避されます。
ターミナルでこの cURL コマンドを実行して、 ATTACHMENT_FROM_USERS_COMPUTER_2 ERC のエントリの添付ファイルの内容を取得します。
curl \
"http://localhost:8080/o/c/ables/by-external-reference-code/ATTACHMENT_FROM_USERS_COMPUTER_2?nestedFields=usersComputerAttachment2.fileBase64" \
--request "GET" \
--user "test@liferay.com:learn"
ターミナルには、Base64 でエンコードされたファイル、その ID、リンク、ラベル、名前を含む同様の出力が表示されます。
...
"usersComputerAttachment2" : {
"fileBase64" : "iVBORw0KG...kJggg==",
"id" : 32283,
"link" : {
"href" : "/documents/20119/32281/AttachmentFromUsersComputer2.png/266a539c-506c-8273-96d2-15206933b993?version=1.0&t=1717605449655&download=true&objectDefinitionExternalReferenceCode=ABLE&objectEntryExternalReferenceCode=ATTACHMENT_FROM_USERS_COMPUTER_2",
"label" : "AttachmentFromUsersComputer2.png"
},
"name" : "AttachmentFromUsersComputer2.png"
}
レスポンスで添付ファイルのフォルダを取得する
応答で Base64 でエンコードされたファイルが格納されているフォルダーを取得するには、 nestedFields=[fieldName].folder クエリ パラメーターを使用して、ネストされたフィールドとして要求する必要があります。 これにより、データへの不要なアクセスを回避できます。
ターミナルでこの cURL コマンドを実行して、 ATTACHMENT_FROM_DOCS_AND_MEDIA ERC を持つエントリのフォルダーを取得します。
curl \
"http://localhost:8080/o/c/ables/by-external-reference-code/ATTACHMENT_FROM_DOCS_AND_MEDIA?nestedFields=docsAndMediaAttachment.folder" \
--request "GET" \
--user "test@liferay.com:learn"
ターミナルには、フォルダーの ERC と、フォルダーが配置されている siteId を含む同様の出力が表示されます。
...
"docsAndMediaAttachment" : {
"folder" : {
"externalReferenceCode" : "ABLE_FOLDER",
"siteId" : 20117
},
...