如何让SharePoint多行文本存储的Base64图片在PowerApps正常显示
问题成因
- SharePoint字段自动转义:如果存储Base64的SharePoint多行文本字段设置为「富文本」或「增强型富文本」模式,SharePoint会自动将Base64中的特殊字符(
+、/、=等)转义为HTML实体编码。手动复制时浏览器会自动将编码还原为原始字符,因此粘贴到图片控件可以正常显示;但通过LookUp函数拉取到的是未还原的编码后文本,不符合Base64图片的格式要求,无法渲染。 - JSON输出的额外引号未处理:
JSON(penFullMapDrawing.Image, JSONFormat.IncludeBinaryData)的返回结果默认自带前后双引号,如果你Patch时没有去除这对引号直接存入字段,Power Apps从SharePoint拉取数据时会自动将外层双引号识别为字符串边界,导致实际传入图片控件的内容缺失前后引号,或出现双重转义的双引号,破坏了data:image/png;base64,xxx的标准格式。
解决方案
调整SharePoint字段配置
进入对应SharePoint列表的设置页面,将存储Base64的多行文本字段的类型修改为纯文本,关闭富文本自动转义逻辑。修正Patch写入逻辑
写入数据时先去除JSON输出的前后双引号再存入字段,公式调整如下:
Patch( 你的SharePoint列表名称, 目标更新条目, { 对应多行文本字段名: Mid(JSON(penFullMapDrawing.Image, JSONFormat.IncludeBinaryData), 2, Len(JSON(penFullMapDrawing.Image, JSONFormat.IncludeBinaryData)) - 2) } )
这里通过Mid函数去掉JSON返回结果的首尾双引号,保证存入SharePoint的是无额外格式的干净Base64字符串。
- 历史数据兼容处理
如果已有大量历史数据存入、不便修改写入逻辑,可直接在图片控件的Image属性中添加转义还原、去引号的处理逻辑:
// 先还原HTML实体编码,再处理额外引号 With( {RawBase64: Substitute(Substitute(Substitute(Trim(LookUp返回的Base64字段值), "+", "+"), "/", "/"), "=", "=")}, If( StartsWith(RawBase64, """") && EndsWith(RawBase64, """"), Mid(RawBase64, 2, Len(RawBase64) - 2), RawBase64 ) )
内容的提问来源于stack exchange,提问作者Cade Weiskopf
相关产品推荐
相关产品推荐

