在Azure儲存體中儲存表單提交

本文說明如何進行REST呼叫,以將提交的AEM Forms資料儲存在Azure儲存空間。
若要將提交的表單資料儲存在Azure儲存體,必須執行下列步驟。

NOTE
本文中的程式碼無法用於以核心元件為基礎的最適化表單。 此處提供核心元件型最適化表單的同等文章

建立Azure儲存體帳戶

登入您的Azure入口網站帳戶並建立儲存帳戶。 為儲存體帳戶提供有意義的名稱,按一下[檢閱],然後按一下[建立]。 這會使用所有預設值建立您的儲存體帳戶。 為了撰寫本文的目的,我們已命名儲存體帳戶aemformstutorial

建立容器

接下來,我們需要建立一個容器,用於儲存表單提交作業中的資料。
從儲存體帳戶頁面,按一下左側的[容器]功能表專案,並建立名為formssubmissions的容器。 請確定公用存取層級已設為私人
容器

在容器上建立SAS

我們將使用共用存取簽章或SAS授權方法來與Azure儲存容器互動。
導覽至儲存帳戶中的容器,按一下省略符號並選取產生SAS選項,如熒幕擷取畫面所示
容器上的sas
請務必指定適當的許可權和適當的結束日期(如底下熒幕擷圖所示),然後按一下「產生SAS權杖和URL」 。 複製Blob SAS權杖和Blob SAS url。 我們將使用這兩個值來進行HTTP呼叫
共用存取金鑰

提供Blob SAS權杖和儲存URI

若要讓程式碼更通用,可以使用OSGi設定來設定這兩個屬性,如下所示。 aemformstutorial ​是儲存帳戶的名稱,_​ formsubmissions ​_是將儲存資料的容器。
請確定儲存URI結尾有/,且SAS權杖的開頭為?
osgi-configuration

建立PUT請求

下一步是建立PUT要求,以將提交的表單資料儲存在Azure儲存體。 每個表單提交都需要以唯一的BLOB ID識別。 唯一的BLOB ID通常會在您的程式碼中建立,並插入PUT請求的URL中。
以下是PUT請求的部分URL。 aemformstutorial是儲存帳戶的名稱,formsubmissions是將資料以唯一BLOB ID儲存的容器。 URL的其餘部分將維持不變。
https://aemformstutorial.blob.core.windows.net/formsubmissions/blobid/sastoken
以下是使用PUT要求將提交的表單資料儲存在Azure儲存體中的函式。 請注意URL中使用容器名稱和uuid。 您可以使用下列範常式式碼建立OSGi服務或Sling servlet,並將表單提交專案儲存在Azure儲存空間。

 public String saveFormDatainAzure(String formData) {
    log.debug("in SaveFormData!!!!!" + formData);
    String sasToken = azurePortalConfigurationService.getSASToken();
    String storageURI = azurePortalConfigurationService.getStorageURI();
    log.debug("The SAS Token is " + sasToken);
    log.debug("The Storage URL is " + storageURI);
    org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    UUID uuid = UUID.randomUUID();
    String putRequestURL = storageURI + uuid.toString();
    putRequestURL = putRequestURL + sasToken;
    HttpPut httpPut = new HttpPut(putRequestURL);
    httpPut.addHeader("x-ms-blob-type", "BlockBlob");
    httpPut.addHeader("Content-Type", "text/plain");

    try {
        httpPut.setEntity(new StringEntity(formData));

        CloseableHttpResponse response = httpClient.execute(httpPut);
        log.debug("Response code " + response.getStatusLine().getStatusCode());
        if (response.getStatusLine().getStatusCode() == 201) {
            return uuid.toString();
        }
    } catch (IOException e) {
        log.error("Error: " + e.getMessage());
        throw new RuntimeException(e);
    }
    return null;

}

驗證儲存在容器中的資料

form-data-in-container

測試解決方案

recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e