4

嗨,我有一个大问题。我有一个来自 Wcf 服务的 byte[] receveid。字节数组表示一个 pdf 文件。在控制器中,我想这样做:

PDFDto pdfDTO = new PDFDTO();
pdfDTO.pdfInBytes = pdfInBytes; //the byte array representing pdf
return PartialView("PopupPDF,pdfDTO);

在视图中我想这样做:

      <object data="@Model.pdfInBytes" width="900" height="600" type="application/pdf"> </object>

但这似乎不正确。我在所有的互联网上搜索过,有很多关于这个问题的帖子,但没有人完全符合我的情况。你有什么想法吗?非常感谢!

4

2 回答 2

11

我建议在专为呈现 PDF 数据而设计的控制器上创建另一个操作。然后只需在您的data属性中引用它即可:

data="@Url.Action("GetPdf", "PDF")"

我不确定您是否可以在 DOM 中转储原始 PDF 数据而不会遇到某种编码问题。尽管我从未尝试过,但您也许可以做类似的图像。但是,为了演示,图像看起来像:

src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"

因此,假设可以执行相同的操作,它可能如下所示:

@{
  String base64EncodedPdf = System.Convert.ToBase64String(Model.pdfInBytes);
}

@* ... *@
<object data="data:application/pdf;base64,@base64EncodedPdf"
        width="900" height="600" type="application/pdf"></object>

然而,我仍然坚持我最初的反应来创建一个新的动作。

于 2013-06-24T13:25:34.547 回答
1
protected ActionResult InlineFile(byte[] content, string contentType, string fileDownloadName)
    {
        Response.AppendHeader("Content-Disposition", string.Concat("inline; filename=\"", fileDownloadName, "\""));
        return File(content, contentType);
    }

将此代码添加到您的基本控制器或控制器本身并调用此函数以在浏览器本身中显示文件。

于 2013-06-24T17:56:04.040 回答