Base64エンコードされたファイルでオブジェクトAPIを使用する
Liferay DXP 2024.Q2+/Portal GA120+
API を介して 添付ファイルフィールド を持つオブジェクトエントリを作成する場合、通常はコンピュータからファイルをアップロードするか、 ドキュメントとメディア アプリケーションにアップロードされたファイルを使用できます。 どちらのシナリオも複数の手順を必要とする。
API経由でオブジェクトエントリを投稿する際に、ドキュメントをアップロードしてそのIDまたは外部参照コード(ERC)を指定するか、API経由でオブジェクトエントリを投稿した後、UIを通じてファイルを添付することができます。
あるいは、POSTリクエストを作成し、リクエストボディにBase64エンコードされたファイルを含めることで、添付ファイル付きのオブジェクトエントリを一度に送信することもできます。
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 添付ファイル ユーザーのコンピューターから直接アップロードするユーザーのコンピュータ添付ファイル2 ユーザーのコンピュータ添付ファイル2 添付ファイル ユーザーのコンピューターから直接アップロード(ドキュメントとメディア内のファイルを表示オプションを切り替えます)ドキュメントとメディア添付ファイル ドキュメントとメディア添付ファイル 添付ファイル ドキュメントとメディアアイテムセレクターからアップロードまたは選択または、
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呼び出しで提供された情報に置き換えます。 |
| 消去 | /[objectNameId] | 指定されたオブジェクトエントリを削除し、操作が成功した場合は204を返します。 |
-
サンプルコードをダウンロードしたら、
liferay-p7x7フォルダーに移動します。プロジェクト内のcurlcd liferay-p7x7/curl
ユーザーのコンピューターから直接アップロードされた添付ファイルを投稿する
ユーザーのコンピューターから直接アップロード ファイルのリクエストオプションを使用して添付ファイル付きのオブジェクトエントリを作成するには、
-
Ables_POST_FromUsersComputer1.shを実行します。 これにより、Base64ファイルが添付されたオブジェクトエントリが作成されます。./Ables_POST_FromUsersComputer1.shfileBase64パラメータを使用して、ファイルをオブジェクトエントリに添付します。... --data-raw '{ "externalReferenceCode": "ATTACHMENT_FROM_USERS_COMPUTER_1", "usersComputerAttachment1": { "fileBase64": "iVB0...gg=="、 "名前": "AttachmentFromUsersComputer1.png" } ...端末には同様の出力が表示されます。
{ "アクション": { "権限": { "メソッド": "GET", "href": "http://localhost:8080/o/c/ables/32268/permissions" }, "get": { "メソッド": "GET", "href": "http://localhost:8080/o/c/ables/32268" }, "replace": { "メソッド": "PUT", "href": "http://localhost:8080/o/c/ables/32268" }, "update": { "メソッド": "PATCH", "href": "http://localhost:8080/o/c/ables/32268" }, "削除": { "メソッド": "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": "承認済み" }, "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 [サイトID]端末には同様の出力が表示されるはずです。
{ "アクション" : { "購読" : { "メソッド" : "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" : { "メソッド" : "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" : { "メソッド" : "DELETE"、 "href" : "http://localhost:8080/o/headless-delivery/v1.0/document-folders/32258" } }, "creator" : { "additionalName" : "", "contentType" : "UserAccount"、 "familyName" : "テスト"、 "GivenName" : "テスト"、 "id" : 20122、 "name" : "Test Test" }、 "customFields" : [ ], "作成日" : "2024-06-05T16:37:12Z", "更新日" : "2024-06-05T16:37:12Z"、 "説明" : "このフォルダには、この演習の添付ファイルが保存されます。"、 "externalReferenceCode" : "ABLE_FOLDER"、 "id" : 32258、 "name" : "Able Folder"、 "numberOfDocumentFolders" : 0、 "numberOfDocuments" : 0、 "siteId" : 20117、 "購読済み" : false } -
Ables_POST_FromDocumentsAndMedia.shを実行します。 これにより、Base64ファイルが添付されたオブジェクトエントリが作成され、最近作成されたフォルダに配置されます。 フォルダのERCとサイトIDをパラメータとして使用します。 この例では、ERC はABLE_FOLDERで、サイト ID は20117です。./Ables_POST_FromDocumentsAndMedia.sh [ERC] [site-id]フォルダーパラメーターを使用して、externalReferenceCodeとsiteIdを追加し、ドキュメントを保存します。... "フォルダー": { "externalReferenceCode": "'${1}'"、 "siteId": "'${2}'" }, ...注記siteIdまたはERCが含まれていない、null または空の場合、POST リクエストは正常に動作し、ファイルはデフォルト サイトのルート フォルダーにアップロードされます。端末には同様の出力が表示されるはずです。
{ "アクション" : { "権限" : { "メソッド" : "GET", "href" : "http://localhost:8080/o/c/ables/32337/permissions" }, "get" : { "メソッド" : "GET", "href" : "http://localhost:8080/o/c/ables/32337" }, "置換" : { "メソッド" : "PUT", "href" : "http://localhost:8080/o/c/ables/32337" }, "更新" : { "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" : "承認済み" }, "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、ダウンロードできるリンク、そのラベル、および名前などが含まれる必要があります。... "作成日" : "2024-06-05T16:37:26Z"、 "更新日" : "2024-06-05T16:37:26Z"、 "externalReferenceCode" : "ATTACHMENT_FROM_USERS_COMPUTER_1"、 "id" : 32268、 "keywords" : [ ]、 "status" : { "コード" : 0, "ラベル" : "承認済み", "label_i18n" : "承認済み" }, "taxonomyCategoryBriefs" : [ ], "usersComputerAttachment1" : { "id" : 32263, "リンク" : { "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 [オブジェクトID]応答には、オブジェクトエントリの更新された情報が表示されます。 応答にはファイルのアドレスが含まれていますが、デフォルトでは
fileBase64エンコーディングは含まれていません。 詳細については、 レスポンスで添付ファイルの内容を取得する を参照してください。 -
外部参照コードは現在
ATTACHMENT_FROM_USERS_COMPUTER_1_ALTEREDであり、画像の名前はAttachmentFromUsersComputer1Altered.pngです。"作成日" : "2024-06-05T16:37:26Z"、 "更新日" : "2024-06-05T16:38:11Z"、 "externalReferenceCode" : "Attachment_FROM_USERS_COMPUTER_1_ALTERED", ... "リンク" : { "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" }、 "名前" : "AttachmentFromUsersComputer1Altered.png" }
添付ファイル付きのオブジェクトエントリを削除する
-
Ables_DELETE_ById.shを実行して、オブジェクトエントリとその添付ファイルを削除します。 オブジェクトエントリIDをパラメータとして使用します。./Ables_DELETE_ById.sh [オブジェクトID] -
応答に内容がありません。
レスポンスで添付ファイルの内容を取得する
レスポンスで Base64 エンコードされたファイルを取得するには、 nestedFields=[fieldName].fileBase64 クエリ パラメータを使用して、それをネストされたフィールドとして要求する必要があります。 ユーザーが要求していない場合は、Base64エンコードの計算を回避します。
ATTACHMENT_FROM_USERS_COMPUTER_2 ERC を持つエントリの添付ファイルの内容を取得するには、ターミナルでこの cURL コマンドを実行してください。
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,
"リンク" : {
"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"
}、
"名前" : "AttachmentFromUsersComputer2.png"
}
レスポンスで添付ファイルのフォルダを取得する
Base64 エンコードされたファイルが保存されているフォルダをレスポンスで取得するには、 nestedFields=[fieldName].folder クエリ パラメータを使用して、それをネストされたフィールドとして要求する必要があります。 これにより、不要なデータアクセスを回避できます。
ATTACHMENT_FROM_DOCS_AND_MEDIA ERC を含むエントリのフォルダを取得するには、ターミナルでこの cURL コマンドを実行してください。
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
},
...