ASP.NET Core API调用第三方接口返回PDF如何正确实现下载
提问内容
我正在调用第三方API,该接口返回.pdf格式的文件。
我尝试用如下代码实现文件下载:
byte[] fileBytes = Encoding.UTF8.GetBytes(response.Content); return File(fileBytes, "application/force-download", "Test.pdf");
但该方案仅对部分文件生效,并非所有文件都能正常下载。
感谢大家提供有帮助的解决方案。
解决方案
问题根因
你的实现核心错误是将二进制格式的PDF文件按照UTF-8文本规则做编码转换。PDF属于二进制文件,内部字节不遵循UTF-8编码规范,使用Encoding.UTF8.GetBytes处理会篡改不符合编码规则的字节内容,最终导致文件损坏,这就是为什么只有部分PDF可以正常打开。
修复代码
调用第三方API时不要读取响应的字符串内容,直接读取原始二进制字节即可,示例代码如下(基于HttpClient实现):
// response为调用第三方API返回的HttpResponseMessage对象 byte[] fileBytes = await response.Content.ReadAsByteArrayAsync(); // 使用PDF标准MIME类型,兼容性优于非标准的application/force-download return File(fileBytes, "application/pdf", "Test.pdf");
优化建议
如果需要处理大体积PDF文件,建议直接读取流返回,避免将全量文件加载到内存中,降低服务内存占用:
Stream pdfStream = await response.Content.ReadAsStreamAsync(); return File(pdfStream, "application/pdf", "Test.pdf");
内容的提问来源于stack exchange,提问作者Kuchh Nae
相关产品推荐
相关产品推荐

