如何将pdf转换为内存流

10
我是一个MVC4应用程序的开发者。
我在服务器上有一个实际存在的pdf文件。我想将其转换为内存流并像这样发送给用户:
return File(stream, "application/pdf", "myPDF.pdf");

我该如何将PDF文件转换为内存流?
谢谢!

1
我不会说“转换”。因为以文件形式存在的PDF本质上就是一串字节流,所以不存在转换。你为什么需要一个内存流?任何流都可以,而且你猜对了,有一个文件流。 - TomTom
可能是重复的问题:如何在ASP.NET MVC中创建文件并通过FileResult返回它? - Panagiotis Kanavos
3个回答

16

您不需要使用 MemoryStream。最简单的方式是使用接受文件名的重载:

return File(@"C:\MyFile.pdf", "application/pdf");

另一种解决方法是使用接受byte[]的重载函数:

return File(System.IO.File.ReadAllBytes(@"C:\Myfile.pdf"), "application/pdf");

或者如果你想使用FileStream

return File(new FileStream(@"C:\MyFile.pdf", FileMode.Open, FileAccess.Read), "application/pdf");

6
解决了
 var pdfContent = new MemoryStream(System.IO.File.ReadAllBytes(imageLocation));
                pdfContent.Position = 0;
                return new FileStreamResult(pdfContent, "application/pdf");

1
这不算太糟糕,但是它会不必要地分配大量内存。你失去了拥有可以流式传输的物理文件的优势。 - fejesjoco

1
使用一个带有文件名参数的重载方法,在这里查看。当你有一个物理文件时,这是最简单的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接