C#MVC网站PDF文件存储在字节数组中,在浏览器中显示

A B*_*gus 8 c# pdf asp.net-mvc

我收到一个byte[]包含PDF的内容.

我需要在浏览器中byte[]显示并显示PDF .我发现了类似的问题 - 如何在MVC中将PDF返回到浏览器?.但是,它在PDF查看器中打开PDF,我也收到错误,说文件无法打开,因为它是" - 不支持的文件类型或因为文件已被损坏".

如何在浏览器中打开PDF?到目前为止,我的代码如下所示 -

    public ActionResult DisplayPDF()
    {
        byte[] byteArray = GetPdfFromDB();
        Stream stream = new MemoryStream(byteArray);
        stream.Flush(); 
        stream.Position = 0; 

        return File(stream, "application/pdf", "Labels.pdf");
    }
Run Code Online (Sandbox Code Playgroud)

Wei*_*Guo 9

如果您已经有了 byte[],则应该使用FileContentResult,它“将二进制文件的内容发送到响应”。仅FileStreamResult在您打开流时使用。

public ActionResult DisplayPDF()
{
    byte[] byteArray = GetPdfFromDB();

    return new FileContentResult(byteArray, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以直接在浏览器中显示字节数组PDF MemoryStream,StreamFileStreamResult不是使用而不是代替File:

 public ActionResult DisplayPDF()
    {
    byte[] byteArray = GetPdfFromDB();
    using( MemoryStream pdfStream = new MemoryStream())
    {
    pdfStream.Write(byteArray , 0,byteArray .Length);
    pdfStream.Position = 0;
    return new FileStreamResult(pdfStream, "application/pdf");
    }
    }
Run Code Online (Sandbox Code Playgroud)

  • @Rob MVC为您处理流中的文件结果,因为您不能将其包装在using子句中(该流将在MVC有机会读取之前被处理) (3认同)