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

Azure Function读取HTTP请求体截断致SHA256校验失败问题求助

问题解决:Azure Function计算PDF文件SHA256值不一致的问题

问题根源

核心错误在于用文本流读取器(StreamReader)处理二进制PDF文件,并通过Encoding.UTF8.GetBytes()将字符串转回字节数组——这个过程会直接破坏二进制数据:

  • StreamReader是为文本设计的,会尝试将二进制字节解码为UTF-8文本,遇到无法解码的字节时会替换为默认占位符,导致原始字节丢失或篡改
  • 即使PDF能正常打开,二进制转字符串再转回字节的操作必然改变原始字节序列,最终导致SHA256计算结果错误
  • 另外,req.Body.Length在分块传输等场景下并不准确,不能作为原始文件大小的可靠参考

修正后的代码

直接读取原始二进制字节流计算哈希,完全避免文本转换操作:

using System;
using System.IO;
using System.Security.Cryptography;
using Microsoft.AspNetCore.Mvc;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    // 读取请求体的原始二进制字节
    byte[] fileBytes;
    using (var memoryStream = new MemoryStream())
    {
        await req.Body.CopyToAsync(memoryStream);
        fileBytes = memoryStream.ToArray();
    }

    log.LogInformation("实际读取的文件字节数: " + fileBytes.Length);

    // 计算SHA256哈希
    using var sha256 = SHA256.Create();
    var hashBytes = sha256.ComputeHash(fileBytes);
    string hexHash = Convert.ToHexString(hashBytes);

    return new OkObjectResult(hexHash);
}

额外注意事项

  • 确保Logic Apps在调用Azure Function时,直接传递PDF文件的原始二进制内容作为请求体,不要经过Base64编码或其他文本转换步骤
  • 若Logic Apps流程中存在"Parse JSON"等文本处理环节,会破坏二进制数据,需移除这类步骤后再传递文件内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:42:37