【发布时间】:2016-06-14 21:44:00
【问题描述】:
我正在尝试在 ASP.NET Web API 控制器中返回一个文件。此文件是保存在 MemoryStream 中的动态生成的 PDF。
客户端(浏览器)成功接收到文件,但是打开文件后发现所有页面都是空白的。
问题是,如果我把相同的 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;
}
只是试一试,如果我将流写入磁盘,它会正确显示:
[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;
}
区别在于:
- 保存在磁盘上的 PDF:34KB
- 通过网络传输的 PDF:60KB (!)
如果我比较两个文件的内容,主要区别是:
左边是通过网络传输的PDF;在右侧,PDF 保存到磁盘。
我的代码有问题吗? 也许与编码有关?
谢谢!
【问题讨论】:
标签: c# angularjs asp.net-web-api asp.net-web-api2 memorystream