返回文件没有正确返回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编码所在的位置。

返回文件没有正确返回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");