如何从K2的ImageAttachment控件获取图片Base64字符串并存入SQL Server
K2 ImageAttachment控件存储Base64图片到SQL Server解决方案
你当前遇到的是ImageAttachment控件默认Input Mapping返回文件元数据XML的问题,返回的结构如下:
<collection><object><fields><field name='FileName'><value>Capture.PNG</value></field><field name='FilePath'><value>AB177CDDBA29104CD0E1AE3F14DCDD4B\Capture.PNG</value></field><field name='FileRequestData'><value></value></field><field name='FileDataURL'><value></value></field></fields></object></collection>
以下是3种可行的解决方法:
方案1:直接映射控件的FileData属性
- 不要直接绑定整个ImageAttachment控件对象到数据库字段,展开控件的属性树,找到
FileData子属性,直接映射到SQL Server的NVARCHAR(MAX)类型字段即可,K2会自动将二进制图片转为Base64字符串存储 - 如果属性树中找不到
FileData字段,先进入控件属性面板→行为分类→勾选将文件内容作为二进制返回,保存后重新配置Input Mapping即可显示该属性
方案2:规则内手动转码生成Base64
适用于低版本K2 Five/Blackpearl不支持直接取FileData的场景:
- 新增一个隐藏的数据标签(Data Label)控件,数据类型设置为字符串
- 在表单提交的前置规则中,添加赋值逻辑:用内置函数
Convert.ToBase64String()转换ImageAttachment控件的二进制文件内容,赋值给刚才新增的数据标签 - Input Mapping时直接绑定该数据标签的值到SQL Server对应字段即可
方案3:后置解析XML转码
适用于已有流程已经配置存储XML元数据,不想改动原有提交逻辑的场景:
- 先从存储的XML中解析出
FilePath字段的值,该路径为K2服务器上的临时文件存储路径 - 调用K2文件服务接口读取临时路径的二进制文件内容,转成Base64字符串后更新到SQL Server的对应字段
- 注意K2临时文件默认24小时后会自动清理,转码操作需要在文件上传后的24小时内执行
注意:Base64编码的体积比原二进制文件大33%左右,如果上传的图片体积较大,建议评估存储成本后,也可以选择直接映射
FileData二进制内容到SQL Server的VARBINARY(MAX)字段,存储空间利用率更高。
内容的提问来源于stack exchange,提问作者maxspan
相关产品推荐
相关产品推荐

