在Azure存储中存储表单提交
本文说明如何进行REST调用以将提交的AEM Forms数据存储在Azure Storage中。
为了能够在Azure Storage中存储提交的表单数据,必须执行以下步骤。
创建Azure存储帐户
登录到您的Azure门户帐户并创建存储帐户。 为存储帐户提供一个有意义的名称,单击“查看” ,然后单击“创建”。 这将创建具有所有默认值的存储帐户。 为撰写本文的目的,我们命名了存储帐户aemformstutorial。
创建容器
接下来,我们需要创建一个容器,用于存储来自表单提交的数据。
在存储帐户页面中,单击左侧的“容器”菜单项,然后创建一个名为formssubmissions的容器。 确保将公共访问级别设置为私有
在容器上创建SAS
我们将使用共享访问签名或SAS授权方法来与Azure存储容器交互。
导航到存储帐户中的容器,单击省略号并选择生成SAS选项,如屏幕快照中所示
请确保指定如下面的屏幕快照所示的适当权限和适当结束日期,然后单击生成SAS令牌和URL。 复制Blob SAS令牌和Blob SAS URL。 我们将使用这两个值来进行HTTP调用
提供Blob SAS令牌和存储URI
为了使代码更通用,可以使用OSGi配置来配置这两个属性,如下所示。 aemformstutorial 是存储帐户的名称,_ formsubmissions _是将存储数据的容器。
请确保存储URI末尾具有/,并且SAS令牌的开头为?
创建PUT请求
下一步是创建PUT请求,以将提交的表单数据存储在Azure Storage中。 每个表单提交都需要使用唯一的BLOB ID进行标识。 唯一BLOB ID通常会在您的代码中创建并插入PUT请求的URL中。
以下是PUT请求的部分URL。 aemformstutorial是存储帐户的名称,formsubmissions是将使用唯一BLOB ID存储数据的容器。 URL的其余部分将保持不变。
https://aemformstutorial.blob.core.windows.net/formsubmissions/blobid/sastoken
以下是使用PUT请求将提交的表单数据存储在Azure Storage中的函数。 请注意是否在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;
}
验证容器中存储的数据
测试解决方案
-
验证数据是否存储在您选择的Azure存储容器中。 复制Blob ID。
-
预览BankAccount表单,并将Blob ID指定为URL中的guid参数,该表单将使用Azure存储中的数据预填充