渲染MVC文件结果嵌入标签,而不是物理Url

本文关键字:Url 标签 文件 MVC 结果 渲染 | 更新日期: 2023-09-27 18:13:03

我有一个返回filerresult(返回PDF文件)的MVC方法,我需要在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>

我在嵌入标签的src中给出了actionname,而不是有一个工作来获得sample.pdf(文件结果)并在浏览器中呈现。

渲染MVC文件结果嵌入标签,而不是物理Url

尝试返回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");
}