【问题标题】:Object or embed is not working in MVC对象或嵌入在 MVC 中不起作用
【发布时间】:2018-06-15 21:10:49
【问题描述】:

我正在尝试在 MVC 视图页面中使用 <embed><object> 将 PDF 显示到视图中。

View.cshtml

<object data="@Server.MapPath(ViewBag.FileName)"  type="application/pdf" >
If you are unable to view file, you can download from
</object>

当我查看页面时,我得到了正确的 PDF 路径,但 PDF 在页面中不可见。

我的相同代码正在处理简单的 HTML 文件。

路径:

【问题讨论】:

  • object 元素的大小/位置是多少?你确定路径存在吗?
  • 尝试将宽度/高度增加到 100%。
  • 我已经更新了路径并给出了宽度和高度

标签: html asp.net-mvc pdf html-object


【解决方案1】:

根据https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object 的文档,&lt;object&gt; 标记的data 属性必须是:

作为有效 URL 的资源地址。

(粗体字是我的,为了说明这一点)。

换句话说,您需要指定指向 PDF 的 URL,而不是文件路径。浏览器无法访问服务器的磁盘,因此无法直接从中读取。它所能做的就是向 URL 发出 HTTP 请求以获取文档。

所以它可能是这样的:

<object data="documents/@ViewBag.FileName"  type="application/pdf" >

当然,您使用的确切内容取决于您放置文档的位置,以及您已经放入 ViewBag.Filename 的确切内容。

请注意,MVC 应用程序中的 App_Data 文件夹无法从 Web 访问(并且不希望使其可访问,因为它包含数据库文件之类的内容),因此您必须将 PDF 放在其他位置更合适。

【讨论】:

  • 好的。所以我将 pdf 移动到内容文件夹并且它正在工作。但 App_data 文件夹没有运气。
  • @UbiquitousDevelopers 太好了。我假设您也改为使用 URL 而不是路径?就像我在答案中所说的那样,它不打算与 App_Data 文件夹一起使用,所以这并不是运气的问题,它是为安全而设计的,因此数据库文件不会直接暴露在互联网上。
  • 好的。明白你的意思。所以 App_Data 文件夹用于保护文件而不是暴露给外界。不是吗?
【解决方案2】:

你不能做一个方法,返回一个读取文件的 FileContentResult 并只在前端显示内容吗?

并添加一个单击此处下载以便在必要时能够下载它。

干杯!

【讨论】:

  • 正在尝试嵌入 PDF,而不是下载它。
  • 并添加一个单击此处下载以便在必要时能够下载它,而我在必要时添加,FileContent 结果可以显示 PDF 内容,就像它在第一个代码示例中一样“如果你看不到你可以下载它”所以我只是添加了它,原因是该评论。
  • FileContent 结果可以显示 PDF 内容 不,被问到的问题是为什么嵌入不起作用,他们不是在寻找不同的解决方案。虽然它可能有效,但您应该将其作为评论而不是答案提出建议。
  • 感谢@DavidG 下次会这样做,而不是作为答案发布!谢谢!
  • 顺便说一句,这里的完美答案是首先回答 OPs 的问题,然后可能会建议你在这里有什么。两全其美。
猜你喜欢
  • 2020-12-19
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多