將程式化資產上傳至AEM as a Cloud Service
瞭解如何使用使用aem-upload Node.js程式庫的使用者端應用程式,將資產上傳至AEM as a Cloud Service環境。
學習內容
在本教學課程中,您將學習:
- 如何使用 直接二進位上傳 方法,透過aem-upload Node.js程式庫將資產上傳至AEM as a Cloud Service環境(RDE、Dev、Stage、Prod)。
- 如何設定並執行aem-asset-upload-sample應用程式,以將資產上傳至AEM as a Cloud Service環境。
- 檢閱應用程式程式碼範例,並瞭解實作詳細資料。
- 瞭解將程式化資產上傳至AEM as a Cloud Service環境的最佳實務。
瞭解 直接二進位上傳 方法
直接二進位上傳方法可讓您使用預先簽署的URL,將檔案從來源系統直接上傳至AEM as a Cloud Service環境中的雲端儲存空間。 如此一來,您就不需要透過AEM的Java程式路由二進位資料,進而加快上傳速度並降低伺服器負載。
在執行範例應用程式之前,請先瞭解直接二進位上傳流程。
在直接二進位上傳流程中,二進位資料會使用預先簽署的URL直接上傳至雲端儲存空間。 AEM as a Cloud Service負責輕量型的處理作業,例如產生預先簽署的URL,以及通知AEM Asset Compute Service上傳完成的相關資訊。 下列邏輯流程圖說明直接二進位上傳流程。
aem-upload資料庫
aem-upload Node.js程式庫會擷取 直接二進位上傳 方法的實作詳細資料。 它提供兩種類別來協調上傳程式:
- FileSystemUpload — 從本機檔案系統上傳檔案時使用此檔案,包括對目錄結構的支援
- DirectBinaryUpload — 使用它來更精細地控制二進位上傳程式,例如從資料流或緩衝區上傳
範例應用程式
使用aem-asset-upload-sample應用程式來瞭解程式化的資產上傳程式。 範例應用程式示範了從aem-upload資料庫使用FileSystemUpload和DirectBinaryUpload類別的情況。
先決條件
在執行範例應用程式之前,請確定您具備下列必要條件:
- AEM as a Cloud Service作者環境,例如快速開發環境(RDE)、開發環境等。
- Node.js (最新LTS版本)
- 基本瞭解Node.js和npm
下載範例應用程式
-
下載aem-asset-upload-sample應用程式zip檔案並解壓縮。
code language-bash $ unzip aem-asset-upload-sample.zip -
在您最愛的程式碼編輯器中開啟解壓縮的資料夾。
code language-bash $ cd aem-asset-upload-sample $ code . -
使用程式碼編輯器終端機,安裝相依性。
code language-bash $ npm install
設定範例應用程式
在執行範例應用程式之前,您必須先使用必要的AEM as a Cloud Service環境詳細資料來設定它,例如AEM作者URL、驗證方法和資產資料夾路徑。
aem-upload Node.js程式庫支援多種驗證方法。 下表摘要列出支援的 驗證方法 及其用途。
若要設定範例應用程式,請遵循下列步驟:
-
將
env.example檔案複製到.env檔案。code language-bash $ cp env.example .env -
開啟
.env檔案,並使用AEM as a Cloud Service作者URL更新AEM_URL環境變數。 -
從下列選項中選擇驗證方法,並更新對應的環境變數。
若要使用基本驗證,您需要在AEM as a Cloud Service環境中建立使用者。
-
登入您的AEM as a Cloud Service環境。
-
瀏覽至工具 > 安全性 > 使用者,然後按一下 建立 按鈕。
-
輸入使用者詳細資訊
-
在 群組 索引標籤中,新增 DAM使用者 群組。 按一下 儲存並關閉 按鈕。
-
以建立的使用者名稱和密碼更新
AEM_USERNAME和AEM_PASSWORD環境變數。
若要取得本機開發權杖,您需要使用AEM Developer Console。 產生的權杖是JSON Web權杖(JWT)型別。
-
登入Adobe Cloud Manager並導覽至所需的 環境 詳細資訊頁面。 按一下「……」 並選取Developer Console。
-
登入AEM Developer Console並使用 新主控台 按鈕切換到更新的主控台。
-
從 工具 區段中,選取整合,然後按一下 取得本機權杖 按鈕。
-
複製權杖值並使用權杖值更新
AEM_BEARER_TOKEN環境變數。
請注意,本機開發權杖的有效期限為24小時,系統會針對產生權杖的使用者核發。
若要取得服務認證,您必須使用AEM Developer Console。 它可用來使用jwt-auth npm模組產生JSON Web權杖(JWT)型別的權杖。
-
登入Adobe Cloud Manager並導覽至所需的 環境 詳細資訊頁面。 按一下「……」 並選取Developer Console。
-
登入AEM Developer Console並使用 新主控台 按鈕切換到更新的主控台。
-
從 工具 區段中,選取 整合 並按一下 建立新的技術帳戶 按鈕。
-
按一下 檢視 選項以復制服務認證JSON。
-
在範例應用程式的根目錄中建立
service-credentials.json檔案,並將服務認證JSON貼到檔案中。 -
使用service-credentials.json檔案的路徑更新
AEM_SERVICE_CREDENTIALS_FILE環境變數。 -
請確定服務認證使用者具有將資產上傳到AEM as a Cloud Service環境的必要許可權。 如需詳細資訊,請參閱在AEM中設定存取權頁面。
以下是設定了所有三種驗證方法的完整範例.env檔案。
# AEM Environment Configuration
# Copy this file to .env and fill in your AEM as a Cloud Service details
# AEM as a Cloud Service Author URL (without trailing slash)
# Example: https://author-p12345-e67890.adobeaemcloud.com
AEM_URL=https://author-p63947-e1733365.adobeaemcloud.com
# Upload Configuration
# Target folder in AEM DAM where assets will be uploaded
TARGET_FOLDER=/content/dam
# DirectBinaryUpload Remote URLs (required for DirectBinaryUpload example)
# URLs for remote files to upload in the DirectBinaryUpload example
# These demonstrate uploading from remote sources (URLs, CDNs, APIs)
REMOTE_FILE_URL_1=https://placehold.co/600x400/red/white?text=Adobe+Experience+Manager+Assets
################################################################
# Authentication - Choose one of the following methods:
################################################################
# Method 1: Service Credentials (RECOMMENDED for production)
# Download service credentials JSON from AEM Developer Console and save it locally
# Then provide the path to the file here
AEM_SERVICE_CREDENTIALS_FILE=./service-credentials.json
# Method 2: Bearer Token Authentication (for manual testing)
AEM_BEARER_TOKEN=eyJhbGciOiJSUzI1NiIsIng1dSI6Imltc19uYTEta2V5LWF0LTEuY2VyIiwia2lkIjoiaW1zX25hM....fsdf-Rgt5hm_8FHutTyNQnkj1x1SUs5OkqUfJaGBaKBKdqQ
# Method 3: Basic Authentication (for development/testing only)
AEM_USERNAME=asset-uploader-local-user
AEM_PASSWORD=asset-uploader-local-user
# Optional: Enable detailed logging
DEBUG=false
執行範例應用程式
範例應用程式會示範三種將範例資產上傳至AEM as a Cloud Service環境的不同方法。
- FileSystemUpload — 從本機檔案系統上傳檔案,具有目錄結構支援和自動資料夾建立功能
- DirectBinaryUpload — 上傳遠端檔案。 檔案二進位檔會先在記憶體中緩衝,然後再上傳至AEM as a Cloud Service環境。
- 批次上傳 — 使用自動重試邏輯和錯誤修復以批次方式從本機檔案系統上傳多個檔案。 在幕後,它使用
FileSystemUpload類別從本機檔案系統上傳檔案。
要上傳的資產位於sample-assets資料夾中,且包含img、video及doc子資料夾,每個子資料夾都包含一些範例資產。
- 若要執行範例應用程式,請使用下列命令:
$ npm start
- 從下列選項中輸入所要的選項number:
╔════════════════════════════════════════════════════════════╗
║ AEM Asset Upload Sample Application ║
║ Demonstrating @adobe/aem-upload library ║
╚════════════════════════════════════════════════════════════╝
Choose an upload method:
1. FileSystemUpload - Upload files from local filesystem with auto-folder creation
2. DirectBinaryUpload - Upload from remote URLs/streams to AEM
3. Batch Upload - Upload multiple files in batches with retry logic
4. Exit
以下標籤顯示範例應用程式執行、其輸出以及AEM as a Cloud Service環境中每個上傳方法的上傳資產。
FileSystemUpload選項的範例應用程式輸出:
| code language-bash |
|---|
|
-
使用AEM as a Cloud Service環境中的
FileSystemUpload選項上傳的Assets:
DirectBinaryUpload選項的範例應用程式輸出:
| code language-bash |
|---|
|
- 使用AEM as a Cloud Service環境中的
DirectBinaryUpload選項上傳的Assets:
Batch Upload選項的範例應用程式輸出:
| code language-bash |
|---|
|
- 使用AEM as a Cloud Service環境中的
Batch Upload選項上傳的Assets:
檢閱範例應用程式程式碼
範例應用程式的主要進入點為index.js檔案。 它包含promptUser函式,可提示使用者選擇並執行選取的範例。
/**
* Prompts user for choice and executes the selected example
*/
function promptUser() {
rl.question(chalk.bold('Enter your choice (1-4): '), async (answer) => {
console.log('');
try {
switch (answer.trim()) {
case '1':
console.log(chalk.bold.green('\n▶ Running FileSystemUpload Example...\n'));
await filesystemUpload.main();
break;
case '2':
console.log(chalk.bold.green('\n▶ Running DirectBinaryUpload Example...\n'));
await directBinaryUpload.main();
break;
case '3':
console.log(chalk.bold.green('\n▶ Running Batch Upload Example...\n'));
await batchUpload.main();
break;
case '4':
rl.close();
return;
default:
console.log(chalk.red('\n✗ Invalid choice. Please enter 1, 2, 3, or 4.\n'));
}
// After example completes, ask if user wants to continue
rl.question(chalk.bold('\nPress Enter to return to menu or Ctrl+C to exit...'), () => {
displayMenu();
promptUser();
});
} catch (error) {
console.error(chalk.red('\n✗ Error:'), error.message);
rl.question(chalk.bold('\nPress Enter to return to menu...'), () => {
displayMenu();
promptUser();
});
}
});
}
如需完整程式碼,請參閱範例應用程式中的index.js檔案。
以下標籤顯示每個上傳方法的實作詳細資料。
FileSystemUpload類別是用來上傳來自本機檔案系統的檔案,具有目錄結構支援及自動建立資料夾的功能。
| code language-javascript |
|---|
|
如需完整程式碼,請參閱範例應用程式中的examples/filesystem-upload.js檔案。
DirectBinaryUpload類別是用來上傳遠端檔案至AEM as a Cloud Service環境。
| code language-javascript |
|---|
|
如需完整程式碼,請參閱範例應用程式中的examples/direct-binary-upload.js檔案。
它會分割檔案為批次,並使用自動重試邏輯和錯誤修復以批次方式上傳。 在幕後,它使用FileSystemUpload類別從本機檔案系統上傳檔案。
| code language-javascript |
|---|
|
如需完整程式碼,請參閱範例應用程式中的examples/batch-upload.js檔案。
此外,範例應用程式的README.md檔案包含範例應用程式的詳細檔案。
最佳做法
-
選擇正確的驗證方法:
針對生產環境使用服務認證、本機開發權杖和基本驗證僅供開發/測試使用。 請確定服務認證使用者具有將資產上傳到AEM as a Cloud Service環境的必要許可權。 -
選擇正確的上傳方法:
針對具有自動資料夾建立的本機檔案,使用FileSystemUpload;針對具有微調控制的串流/緩衝區/遠端URL,使用DirectBinaryUpload;以及針對具有1000多個需要重試邏輯之檔案的生產環境使用批次上傳模式。 -
正確建構DirectBinaryUpload檔案物件
將blob屬性(非緩衝區)與下列必要欄位搭配使用: { fileName, fileSize, blob: buffer, targetFolder },並記住DirectBinaryUpload不會自動建立資料夾。 -
範例應用程式作為參考:
範例應用程式是程式化資產上傳流程實作詳細資訊的良好參考。 您可將它當作自己實作的起點。