2014-02-17 59 views
5

我正在MVC4中编写应用程序。如何将pdf转换为内存流

我在服务器上有一个物理pdf文件。我想将其转换为一个内存流,并将其发送给用户这样的:

return File(stream, "application/pdf", "myPDF.pdf"); 

但我怎么转换PDF文件到内存流?

谢谢!

+1

我会不说“转换”。鉴于文件形式的pdf是一个没有转换的字节流。为什么你需要一个内存流?任何流应该做,并猜测是什么,有一个文件流。 – TomTom

+0

[如何通过ASP.NET MVC中的FileResult创建文件并将其返回?](http://stackoverflow.com/questions/1375486/how-to-create-file-and-return-it-via- fileresult-in-asp-net-mvc) –

回答

7

你不需要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"); 
+0

真棒谢谢.. – user2206329

1

使用使用文件名的过载,see here。当你有一个物理文件时,这是最简单的解决方案。

4

工作了

var pdfContent = new MemoryStream(System.IO.File.ReadAllBytes(imageLocation)); 
       pdfContent.Position = 0; 
       return new FileStreamResult(pdfContent, "application/pdf"); 
+1

这并不坏,但这会不必要地分配大量内存。您失去了可以*流式传输*的物理文件的优势。 – fejesjoco