繁体   English   中英

在嵌入标记中渲染MVC Fileresult而不是物理URL

[英]Render MVC Fileresult in embed tag not the physical Url

我有一个返回fileresult的MVC方法(返回PDF文件),我需要在src标签中使用相同的url并在浏览器中显示它。

例如,我的示例代码如下:

public FileResult GetAttachment()
{
    return File(@"c:\sample.pdf", "application/pdf", "sample.pdf");
}

<embed src="/Home/GetAttachment" width="100%" height="1150" type="application/pdf"></embed>

我在embed标签的src中给出了actionname,而不是有一个解决方法来获取sample.pdf(文件结果)并在浏览器中渲染。

尝试返回FileStreamResult

public ActionResult GetAttachment()
{
    var fileStream = new FileStream(Server.MapPath("~/Content/files/sample.pdf"), 
                                     FileMode.Open,
                                     FileAccess.Read
                                   );
    var fsResult = new FileStreamResult(fileStream, "application/pdf");
    return fsResult;
}

内部视图:

<embed src="@Url.Action("GetAttachment", "Home")" width="100%" height="1150" type="application/pdf"></embed>

最终,pdf显示将如何由系统上安装的pdf查看器及其设置决定。 也就是说,在某些情况下,您可能会强制它呈现内联。 您可以尝试用类似的东西覆盖内容处置

Response.Headers.Remove("Content-Disposition");
Response.Headers.Add("Content-Disposition", "inline; filename=sample.pdf");
return File(@"c:\sample.pdf", "application/pdf", "sample.pdf");

您可能需要两种方法 - 一种呈现内联,一种下载或bool参数来确定呈现。

你可以试试

public FileResult GetAttachment()
{
    byte[] contents = System.IO.File.ReadAllBytes(@"c:\sample.pdf");
    Response.AddHeader("Content-Disposition", "inline; filename=sample.pdf");
    return File(contents, "application/pdf");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM