You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Episerver实现PDF链接点击直接下载而非浏览器打开

搞定Episerver中PDF链接直接下载的问题

嘿,我来帮你解决这个PDF在浏览器打开而不是直接下载的问题,有两种实用的方法,看你需求选就行:

方法一:给URL加个下载参数(最简单)

Episerver本身支持给媒体文件的URL加?download=true参数,加上之后就能强制浏览器触发下载行为,不用改后端代码,直接改Razor视图就行:

<a href="@Url.ContentUrl(Model.PdfMedia)?download=true" class="btn btn-primary" tabindex="-1">@Model.CurrentBlock.DownloadPdfText</a>

就这么简单,直接在生成的URL后面拼上?download=true,刷新页面点击链接试试,PDF应该就直接下载了。

方法二:用控制器动作处理(更灵活)

如果你需要在下载前做点额外操作,比如验证用户权限、记录下载次数,那用控制器动作的方式更合适:

  1. 先在你的控制器里加个处理下载的方法(记得注入IContentLoader来获取媒体内容哦):
public ActionResult DownloadPdf(int contentId)
{
    var pdfMedia = _contentLoader.Get<MediaData>(new ContentReference(contentId));
    if (pdfMedia == null)
    {
        return NotFound();
    }

    // 获取PDF的文件流
    var fileStream = pdfMedia.BinaryData.OpenRead();
    // 用媒体文件的原文件名作为下载文件名
    var fileName = pdfMedia.Name;

    // 返回文件流,设置Content-Disposition为attachment,强制浏览器下载
    return File(fileStream, pdfMedia.MimeType, fileName);
}
  1. 然后修改Razor视图里的链接,指向这个控制器动作:
<a href="@Url.Action("DownloadPdf", "你的控制器名称", new { contentId = Model.PdfMedia.ID })" class="btn btn-primary" tabindex="-1">@Model.CurrentBlock.DownloadPdfText</a>

这种方法能让你在下载流程里加自定义逻辑,扩展性拉满。

小提醒

  • 第一种方法里的?download=true是Episerver内置支持的,它会自动帮你设置好正确的响应头,不用担心兼容性问题。
  • 记得确认你的PDF媒体文件的MIME类型是application/pdf,这能让浏览器准确识别文件类型,避免出现奇怪的问题。

内容的提问来源于stack exchange,提问作者Ayo Adesina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:29