c# - 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 文件”(从丹麦语免费翻译)。
我错过了什么?- 还有另一种(更好的)方法吗?
谢谢!
解决方案
我认为您不需要编写 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);
推荐阅读
- perl - Perl 5.32.1 GDBM_File 非常慢
- chatbot - 无法使用 Botium CLI 从 QnAMaker 导入 convos 和话语
- replace - 替换python中的坏字符
- java - 如何为 ZipInputStream.getNextEntry 编写 Junit
- amazon-web-services - 来自 lambda 函数的多域
- java - 一旦输入扫描仪存储数据,以保存在各种阵列中。爪哇
- java - 如何在集成中使用执行器进行并行处理
- ssl - 如何在标准应用引擎中限制 1.2 版本的 SSL/TLS 协议以用于谷歌管理的 ssl
- java - 如何使用并行性来加速 URL GET 请求?
- javascript - 指向新屏幕的单元格中的 Ag-grid 按钮