我有一个可以调用的控制器操作,它从字节数组返回pdf文件。这可以正常工作,我可以通过以下剃刀操作查看嵌入在页面上的文档:
<embed src="@Url.Action("Preview_PDF", "Doc", new { file_name = @Model })" width="100%" height="100%" type="application/pdf"></embed>
Run Code Online (Sandbox Code Playgroud)
有没有办法从视图模型嵌入文件?例如
<embed src="@Model.file" width="100% " height="100%" type="application/pdf"></embed>
Run Code Online (Sandbox Code Playgroud)
我正在从控制器中使用“返回文件”,这不是我可以在模型类中设置的内容,因为文件是静态类型,所以不允许我将其声明为变量。
如何将文件嵌入模型的页面上?我可以将文件存储为字节数组,但是我不知道如何在视图上重建它。
有可能,但是根据浏览器的不同,您可能会得到不一致的结果。
在第一个示例中,您实际上并没有嵌入任何内容。您将发出一个<EMBED>带有PDF位置的标签;浏览器实际上负责检索PDF(在单独的HTTP请求中)。因此,尽管最后一页中嵌入了PDF,但它并未嵌入HTTP响应中。
如果要嵌入一些内容,以使二进制内容在HTML文档中内联显示,请遵循以下语法:
<EMBED Src="data:application/pdf;base64,[Based64-encoded string]">
Run Code Online (Sandbox Code Playgroud)
因此,如果@Model.file是包含文件的字节数组,则可以通过向返回标记的模型添加新属性来完成所需的操作,如下所示:
class MyModel
{
public string InlineMarkup
{
get
{
return String.Format("data:application/pdf;base64,{0}", Convert.ToBase64String(this.file));
}
}
Run Code Online (Sandbox Code Playgroud)
...并且您认为:
<embed src="@Model.InlineMarkup" width="100% " height="100%" type="application/pdf">
Run Code Online (Sandbox Code Playgroud)
另请注意,这EMBED是一个void元素,因此该</EMBED>标记不是必需的,也不是严格合法的。
另请参阅此问题。
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |