返回文件没有正确返回pdf
本文关键字:返回 pdf 文件 | 更新日期: 2023-09-27 18:14:51
我目前正在使用pdf库生成pdf服务器端。当这已经完成,然后我尝试返回这个pdf给用户。
每次我尝试PDF无法打开,或者如果我强迫它下载,下载为一个损坏的文件。如果我在浏览器中输入pdf的物理地址,它会正常加载。
in my controller:
return File(nfilePath, "application/pdf");
本例中nfilePath = ~/PdfStore/CurRep103323842.pdf
我被这么简单的事情难住了,任何建议都会很棒。谢谢。加载部分视图的视图
@model PrintShiftHandover.Models.ShiftHandOver
@{
ViewBag.Title = "ShiftHandOver";
}
<div id="updateRegion">
@{Html.RenderAction("_ReportDetails");}
</div>
部分视图。
@model PrintShiftHandover.Models.MainReportDetail
@{
Layout = string.Empty;
}
<div id="PartialView">
@using (Html.BeginForm())
{
.............这里有一张表格。
}
</div>
控制器。
[HttpPost]
public ActionResult _ReportDetails(Models.MainReportDetail model)
{
var getfile = new CreatePdf();
var nfilePath = getfile.GetFile(model);
return File(nfilePath, "application/pdf");
}
catch(Exception ex)
{
ModelState.AddModelError("",ex.Message);
return View(model);
}
}
生成的pdf包含从主视图生成的HTML,在div updatereregion中是pdf编码所在的位置。
您正在调用@Html.RenderAction
,这实际上是将PDF文件嵌入到您的输出中。
您需要将其替换为调用@Html.ActionLink
的按钮/链接。因此替换下面这行:
@{Html.RenderAction("_ReportDetails");}
:
@Html.ActionLink("_ReportDetails")
或者,您可以放置一个元刷新标记或jQuery来强制文件下载。
你不能在路径中使用"~"
试题:
//Convert to absolute path
nfilePath = HttpContext.Current.Server.MapPath(nfilePath);
return File(nfilePath, "application/pdf");