我正在尝试在ASP.NET Web API控制器中返回文件。此文件是动态生成的PDF,保存在MemoryStream中。
客户端(浏览器)成功接收到文件,但是当我打开文件时,我看到所有页面都完全空白。
问题是,如果我使用相同的MemoryStream并将其写入文件,则此磁盘文件将正确显示,因此我认为问题与通过Web传输文件有关。
我的控制器如下所示:
[HttpGet][Route("export/pdf")]
public HttpResponseMessage ExportAsPdf()
{
MemoryStream memStream = new MemoryStream();
PdfExporter.Instance.Generate(memStream);
memStream.Position = 0;
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(memStream.ToArray()); //OR: new StreamContent(memStream);
return result;
}
Run Code Online (Sandbox Code Playgroud)
尝试一下,如果我将流写入磁盘,则会正确显示:
[HttpGet][Route("export/pdf")]
public HttpResponseMessage ExportAsPdf()
{
MemoryStream memStream = new MemoryStream();
PdfExporter.Instance.Generate(memStream);
memStream.Position = 0;
using (var fs = new FileStream("C:\\Temp\\test.pdf", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
memStream.CopyTo(fs);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于:
如果我比较两个文件的内容,主要区别是:
左侧是通过Web传输的PDF。在右侧,PDF已保存到磁盘。
我的代码有问题吗?也许与编码有关?
谢谢!