11

我收到一个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");
    }
4

2 回答 2

12

您可以直接在浏览器中显示字节数组 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");
    }
}
于 2016-03-29T16:11:10.380 回答
11

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

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

    return new FileContentResult(byteArray, "application/pdf");
}
于 2019-08-16T12:50:14.127 回答