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

C#MVC网站PDF文件存储在字节数组中,显示在浏览器中,c#,asp.net-mvc,pdf,C#,Asp.net Mvc,Pdf,我收到一个包含PDF的字节[] 我需要获取字节[]并在浏览器中显示PDF。 我发现了类似的问题,比如-。 但是,它会在PDF查看器中打开PDF,而且我收到一个错误,说文件无法打开,因为它“不是受支持的文件类型,或者因为文件已损坏” 如何在浏览器中打开PDF?到目前为止,我的代码如下所示- public ActionResult DisplayPDF() { byte[] byteArray = GetPdfFromDB(); Stream stre

我收到一个包含PDF的
字节[]

我需要获取
字节[]
并在浏览器中显示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");
    }

只需使用
MemoryStream
而不是
Stream
FileStreamResult
而不是
File
,即可直接在浏览器中显示字节数组PDF:

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");
    }
}

如果您已经有了字节[],那么应该使用,它“将二进制文件的内容发送到响应”。只有在打开流时才使用
FileStreamResult

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

    return new FileContentResult(byteArray, "application/pdf");
}

这里已经回答:嘿!把它放在using子句中@Rob MVC在fileresults中为您处理流,因为您无法将其包装在using子句中(该流将在MVC有机会读取它之前被处理)使用
Response.AddHeader(“内容处理”,“内联;文件名=Test.pdf”)
设置文件名,但不立即下载文件。例如,当您有一个Mvc app.inline+文件名似乎不是正确的标题时,您可以通过子类化
System.Web.Mvc.Controller来获得
响应
。Chrome和Firefox尊重设置的用户名,但Edge不尊重。所以要小心,注意这一点。这对我来说非常有效。使用JavaScript打开一个小窗口并调用控制器,我能够使用上面的代码从数据库中提取pdf图像。打开('GetInvoiceImage?ExternalImage='+ExternalImage,'Image_win','width=800,height=500,left=0,top=0,scrollbars=yes,Resizeable=yes,menubar=yes');