现在,这里有一篇关于SAP AppGyver的文章。
今天我想解释一下如何处理图像数据。图片可以在.....在HANA云的BLOB类型列中存储有优点和缺点。
假设
在这篇文章中,我将解释如何创建一个应用程序,拍摄照片并将其存储在HANA云的BLOB类型列中。(在下一篇文章中,我将创建一个应用程序,以调用和显示存储的数据)。
由于使用了相机,你必须在智能手机上安装SAP AppGyver Preview应用程序,才能运行该应用程序 ,你不能在Web Preview上运行。
前言
首先,创建环境,并确保你可以在OData中发布数据。然后在他的描述中添加以下实体
schema.cds
entity BlobTest : cuid {
imagedata : LargeBinary;
mimetype : String(100);
}
incidentService.cds
entity BlobTest as projection on cloud.BlobTest;
- Add the above to the service IncidentService's {....}
另外,由于这次将使用SAP Appgyver的这个OData服务,请在srv目录下创建一个名为server.js的文件,以允许CORS,写上以下内容。
"use strict";
const cds = require("@sap/cds");
const cors = require("cors");
cds.on("bootstrap", app => app.use(cors()));
module.exports = cds.server;
*如果你不在BAS上做 "npm install cors",你可能会在部署时出错。
现在构建、部署,并确保BlobTest表已发布。
创建AppGyver应用程序
创建OData集成资源
让我们从创建数据资源开始。在本例中,我将为上面部署的OData集成创建一个资源,使用列表中的 "BlobTest "表。

测试以确认响应是否正确返回。
创建页面
创建一个新的页面或使用从一开始就存在的 "空页面",可以按原样使用。
首先,两个文本类型的变量,"path "和 "mimetype",被定义为页面变量。

屏幕设计很简单。

你在快照中看不到图像,但可以认为它被夹在两个按钮之间。(注意右下角的PAGE LAYOUT)。
这是由于被指定为该图像的源的变量造成的。这个图像的来源是我创建的页面变量的 "路径"。
注意,由于类型问题,这个赋值并不简单。使用像Snapshot这样的公式,并从那里进行赋值。这样做你也会得到一个错误信息,但你可以忽略它。
让我解释一下上面的 "拍照 "按钮背后的逻辑。这个按钮从字面上看是分配了拍摄照片的功能。完整的逻辑是这样的

将按钮的点击事件连接到 "拍照 "流程,并从顶部的圆圈连接到两个 "设置页面变量 "流程。在这个 "设置页面变量 "流程中,为之前定义的页面变量 "path "和 "mimetype "设置值。
对于 "path":

设置 "路径",以包括在 "拍照 "流程的输出中。
mimetype "是用一个公式设置的。

变量的名称是 "mimetype",但设置的是文件扩展名信息。
本来,mimetype信息应该在 "拍摄照片 "流程的输出mimetype中输出,但目前似乎没有输出。因此,为了获得文件类型,应将 "指定值 "设置为公式,如下所示。
LAST_ITEM(SPLIT(outputs["Take photo"].photoFile.name, "."))
由于文件名是在 "name "中输出的,它被除以".",最后一项被获取。这就是获得文件扩展名的方式。
小测试
到目前为止,让我们做一个小测试。在你的智能手机上启动你用SAP AppGyver Preview应用程序开发的应用程序,点击 "拍照 "按钮,进入相机模式。然后点击 "Capture "按钮来拍摄照片,照片应该出现在两个按钮之间的图像中。

一旦你确认到此为止一切工作正常,你就可以进入下一步:开发上传至BTP按钮的逻辑。
开发上传至BTP的逻辑(HANA云)
上传至BTP "按钮背后的逻辑看起来是这样的

该逻辑是为了上传数据,所以在上传过程中会显示旋钮。作为逻辑的概述,"将文件转换为base64 "流程将捕获的图像编码为BASE64格式,并通过OData将数据上传(=插入)到BTP的HANA云。
在 "转换文件为base64 "流程的源文件URL中指定Page变量的 "路径"。
在 "创建记录 "中指定创建的BlobTest作为资源名称的OData集成数据源。

记录的设置采用公式,具体如下。
{ imagedata: outputs["Convert file to base64"].base64, mimetype: pageVars.mimetype}
将通过 "Convert file to base64 "转换为Base64的数据分配给 "imagedata",将设置为页面变量的mimetype分配给 "mimetype"。
这个BlobTest也有一个ID作为实体(通过指定cuid自动创建),但这个ID是自动编号的,所以不需要指定它。相反,如果在OData传输字符串中指定ID,就会出现错误。因此,有必要在不使用Mapping等函数的情况下,指定一个公式来构建传输字符串。指定的ID可以作为这个 "创建记录 "流程的输出来获得。如果你在后续处理中需要它,不要忘记在这里获得它。现在,我已经使ID显示在 "创建记录 "成功响应后的警报对话框中。

运行应用程序
现在让我们测试一下这个应用程序。
用 "拍照 "按钮拍一张照片,用 "上传到BTP "按钮上传图片。

如果你设置的警报对话框出现在正常响应中,你就成功了。
让我们通过从网络浏览器访问ODATA服务来检查。

数据是以BLOB类型显示的,所以你可能会看到无法理解的数据。但如果它出现了,就是成功了。
现在您可以将SAP AppGyver的图像数据存储到HANA云的Blob类型列中。