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

Azure Function返回Blob存储PDF流时客户端接收内容异常如何解决

问题根因

你当前遇到的问题核心是Azure Function 隔离工作进程模型无法直接识别并序列化ASP.NET Core的FileStreamResult类型,运行时没有对应的处理逻辑,直接调用了对象的ToString()方法返回,因此客户端收到的是Microsoft.AspNetCore.Mvc.FileStreamResult字符串。
另外你原有服务端代码中存在拼写错误:ReadToEndAsynce()多了末尾的e,正确写法为ReadToEndAsync()。

修复方案

服务端调整(兼容所有Azure Function运行模型)

建议使用Azure Function原生的HttpResponseData构造返回流,避免跨模型兼容问题:

[Function("GetPdf")]
public async Task<HttpResponseData> GetPdf(
  [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req,
  FunctionContext executionContent)
{
  // 原有请求体校验、反序列化逻辑不变
  var reqBody = await new StreamReader(req.Body).ReadToEndAsync();
  var theRequest = JsonConvert.DeserializeObject<TheRequest>(reqBody);
  var ms = await svc.GetPdfFromBlobStorage(theRequest.fileName);
  ms.Seek(0, SeekOrigin.Begin);

  // 构造PDF响应
  var response = req.CreateResponse(HttpStatusCode.OK);
  response.Headers.Add("Content-Type", "application/pdf");
  // 可选:指定下载文件名
  response.Headers.Add("Content-Disposition", $"attachment; filename=\"{theRequest.fileName}\"");
  await response.Body.WriteAsync(ms.ToArray());
  return response;
}

客户端优化(可选)

新增响应状态校验逻辑,避免把错误响应内容保存为PDF文件:

static async Task Main(string[] args)
{
  var fileInfo = new FileInfo(@"c:\temp\test.pdf");
  using var client = new HttpClient();
  var req = new { fileName = "the_file"};
  var json = JsonConvert.SerializeObject(req);
  var data = new StringContent(json, Encoding.UTF8, "application/json");

  var response = await client.PostAsync("http://localhost:7071/api/GetPdf", data);
  // 校验请求是否成功
  if (!response.IsSuccessStatusCode)
  {
      Console.WriteLine($"请求失败,状态码:{response.StatusCode}");
      return;
  }
  
  await using var ms = await response.Content.ReadAsStreamAsync();
  await using var fs = File.Create(fileInfo.FullName);
  await ms.CopyToAsync(fs);
}

如果你的Azure Function使用的是进程内运行模型,也可以直接返回File(ms, "application/pdf")替代FileStreamResult即可正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:06:06