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

Logic Apps上传Blob文件至API后大小异常,PGP文件无法解密

Logic Apps上传PGP加密文件时二进制内容被转字符串导致解密失败的解决方案

问题描述

我有一个Logic App,会定期列出Blob存储内容并将文件上传至API,原本部分文件类型可正常工作,但处理PGP加密文件(如myfile.txt.pgp)时出现异常:文件上传至API后字节数组长度几乎翻倍,且无法解密。

当前使用的请求体配置如下:

{
  "$content-type": "multipart/form-data",
  "$multipart": [
    {
      "body": "@{body('Get_blob_content_(V2)')}",
      "headers": {
        "Content-Disposition": "form-data; name=original;  filename=@{item()?['Name']}",
        "Content-Type": "@{item()?['MediaType']}"
      }
    },
    {
      "body": "@{item()?['Path']}",
      "headers": {
        "Content-Disposition": "form-data; name=fullname;"
      }
    },
    {
      "body": "@{item()?['Size']}",
      "headers": {
        "Content-Disposition": "form-data; name=blobsize;"
      }
    }
  ]
}

实际现象:Blob内容长度为4078,上传的blobSize也显示为4078,但API接收到的文件大小约为7479,格式异常无法解密。用Postman或UI上传同一文件及参数时API可正常工作,但通过Logic Apps发送的内容格式错误。

补充:上传文本文件时发现Get blob content (V2)返回的是文件字符串内容,推测PGP文件也被当作字符串处理,导致加密内容失效,需要获取并发送原始二进制内容。

解决方案

核心是让Logic Apps以原始二进制格式传递PGP文件内容,避免字符串编码转换:

1. 修改文件内容的引用方式

将请求体中文件部分的body修改为使用binary()函数转换内容:

@{binary(body('Get_blob_content_(V2)'))}

如果Blob内容是以base64编码形式返回的,可使用组合函数:

@{binary(base64ToString(body('Get_blob_content_(V2)')))}

2. 强制设置正确的Content-Type

对于PGP文件,直接指定Content-Type为application/octet-stream,避免Logic Apps自动推断为文本类型。

修改后的完整请求体

{
  "$content-type": "multipart/form-data",
  "$multipart": [
    {
      "body": "@{binary(body('Get_blob_content_(V2)'))}",
      "headers": {
        "Content-Disposition": "form-data; name=original;  filename=@{item()?['Name']}",
        "Content-Type": "application/octet-stream"
      }
    },
    {
      "body": "@{item()?['Path']}",
      "headers": {
        "Content-Disposition": "form-data; name=fullname;"
      }
    },
    {
      "body": "@{item()?['Size']}",
      "headers": {
        "Content-Disposition": "form-data; name=blobsize;"
      }
    }
  ]
}

原理说明

  • Logic Apps中Get blob content (V2)默认会将非文本文件的二进制内容转为字符串形式(如转义的Unicode字符),导致字节数膨胀且破坏原始加密结构。
  • binary()函数可将字符串形式的二进制内容还原为原始字节流,确保API接收到的内容和原Blob完全一致。
  • 强制设置application/octet-stream的Content-Type,明确告知系统这是二进制文件,避免触发文本编码转换逻辑。

内容的提问来源于stack exchange,提问作者Everett McCoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:45:06