You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Dynamics CRM获取的Base64附件还原为原格式文件?

解决Dynamics CRM附件Base64格式识别与保存问题

一、从Base64字符串识别文件格式

可以直接从Base64解码后的二进制数据头部判断文件格式,不同类型的文件都有固定的文件签名(Magic Number),无需完整解码整个Base64串,仅解码前4-8个字节即可匹配判断:

  • JPG:头部字节为 FF D8 FF
  • PNG:头部字节为 89 50 4E 47
  • PDF:头部字节为 25 50 44 46
  • TXT:无固定签名,需通过解码后的内容判断(若为纯文本编码,解码后无不可打印字符)

具体操作逻辑:将Base64字符串解码为字节数组,提取前几个字节与已知的文件签名对比,即可确定文件格式。

二、用ADF或Logic Apps保存原格式附件

(1)Azure Logic Apps实现步骤

  • 触发流程:选择手动触发,或配置Dynamics CRM触发器(当有新的activitymimeattachments实体创建时触发)
  • 获取附件数据:调用Dynamics 365连接器,读取activitymimeattachments实体的body(Base64内容)和filename字段
  • 创建文件:添加「创建文件」动作(目标可选Azure Blob存储、OneDrive等)
    • 「文件内容」选择动态变量中的Base64内容,Logic Apps会自动完成Base64到二进制的转换
    • 「文件名」优先使用实体自带的filename;若没有该字段,就用自定义名称+识别出的格式后缀(例如attachment_001.png)
  • 运行流程,验证文件是否正常保存且格式无误

(2)Azure Data Factory(ADF)实现步骤

  • 配置数据源:使用Dynamics 365连接器连接CRM,加载activitymimeattachments实体数据,需包含body(Base64内容)和filename字段
  • 处理格式识别:添加「派生列」转换,新增file_extension列,通过表达式实现格式判断:
    case(
        left(base64ToBinary(body),3) == binary('FFD8FF'), 'jpg',
        left(base64ToBinary(body),4) == binary('89504E47'), 'png',
        left(base64ToBinary(body),4) == binary('25504446'), 'pdf',
        'txt'
    )
    
  • 配置接收器:选择Azure Blob存储/ADLS作为目标,设置文件名规则:
    ifnull(filename, concat('attachment_', uuid(), '.', file_extension))
    
  • 设置文件内容:将接收器的内容字段设为base64ToBinary(body),ADF会自动将Base64转为二进制写入文件
  • 运行管道,验证文件保存结果

内容的提问来源于stack exchange,提问作者Eva Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:47:50