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

C#从URL获取PDF并流式返回响应时内容为空问题求助

解决PDF流返回内容为空的问题

你的问题出在用文本流处理二进制PDF文件:StreamReader是为读取文本数据设计的,它会按文本编码解析字节流,破坏了PDF的二进制结构。最终输出的内容只剩PDF的空框架(所以页数正确),但实际内容全部丢失。

正确的处理方式

直接操作二进制流,避免文本解析:

方法1:流直接复制

WebClient client = new WebClient();
// 使用using自动释放流资源
using (Stream downloadStream = client.OpenRead(baseUrl + endPoint))
{
    Response.Clear();
    Response.ContentType = "application/pdf";
    // 给文件名加上引号,兼容特殊字符
    Response.AddHeader("content-disposition", "attachment; filename=\"report.pdf\"");

    // 将下载的二进制流直接复制到响应输出流
    downloadStream.CopyTo(Response.OutputStream);
    Response.End();
}

方法2:读取字节数组后写入

WebClient client = new WebClient();
byte[] pdfBytes = client.DownloadData(baseUrl + endPoint);

Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=\"report.pdf\"");

// 直接写入二进制字节数组
Response.OutputStream.Write(pdfBytes, 0, pdfBytes.Length);
Response.End();

额外注意事项

  • 必须用using管理流对象,避免内存泄漏
  • 文件名建议加双引号,防止文件名包含空格、特殊字符时出现解析错误
  • 调用Response.End()确保响应及时结束,避免后续代码干扰输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:04:53