首页 > 解决方案 > Response.Body.WriteAsync:无法打开文件

问题描述

我从外部源获取一个文件,它以字节数组的形式返回文件。现在我想在浏览器中打开文件。

这就是我所做的:

public async Task OpenFile()
{

    [...]
    byte[] pdf = externalResource.GetPdf();
    Response.Headers.Add("Content-Disposition", "inline;filename=MyFile.pdf");
    await Response.Body.WriteAsync(pdf, 0, pdf.Length);
    Response.Body.Seek(0, SeekOrigin.Begin);
    //await Response.Body.FlushAsync();
    return;
}

我第一次调用 OpenFile 时,会显示 PDF 文件。但是,如果我再次调用 OpenFile 或刷新窗口,我会从浏览器中收到“无法打开 PDF 文件”(从丹麦语免费翻译)。

我错过了什么?- 还有另一种(更好的)方法吗?

谢谢!

标签: c#asp.net-core-3.1

解决方案


我认为您不需要编写 Response.Body.Seek 部分,因为在您将任何缓冲区数据写入响应正文后,实际响应已为您的浏览器准备就绪。

                    byte[] pdf = File.ReadAllBytes("C:/Users/skilic/Desktop/1.pdf");
                
                context.Response.Headers.Add("Content-Disposition", "inline;filename=MyFile.pdf");
                
                await context.Response.Body.WriteAsync(pdf, 0, pdf.Length);
                
                //context.Response.Body.Seek(0, SeekOrigin.Begin);

我只使用基本的 dotnet 核心网络应用程序对其进行测试。 在此处输入图像描述


推荐阅读