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

ASP.NET数据库PDF文件详情页显示问题求助

问题描述

我想在详情页展示数据库里存储的PDF文件,但遇到了问题:文件保存的是物理绝对路径(比如D:\Projects\asp\Portail_Candida\Portail_Candida\CandidatCvs\ayman_jarmoune_cv_fr.pdf),导致无法正常显示,只有用相对路径(比如~/CandidatCvs/as.pdf)才能正常展示。以下是我的保存方法代码和前端cshtml代码:

保存方法代码

public ActionResult Upload(Candidateur candida)
{
    using (RecrutementPortailEntities entity = new RecrutementPortailEntities())
    {
        var candidate = new candidature()
        {
            NomCandidature = candida.NomCandidature,
            PrenomCandidature = candida.PrenomCandidature,
            MailCandidature = candida.MailCandidature,
            TeleCandidature = candida.TeleCandidature,
            NiveauEtudeCandidature = candida.NiveauEtudeCandidature,
            CvCandidature = SaveToPhysicalLocation(candida.CvCandidature),
            NumbMoisExperienceCandidature = candida.NumbMoisExperienceCandidature,
            DatedepositCandidature = DateTime.Now,
            DernierEmployeeCandidature = candida.DernierEmployeeCandidature
        };
        entity.candidatures.Add(candidate);
        entity.SaveChanges();
    }
    return View(candida);
}


private string SaveToPhysicalLocation(HttpPostedFileBase file)
{
    if (file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(Server.MapPath("\\CandidatCvs"), fileName);
        file.SaveAs(path);
        return path;
    }
    return string.Empty;
}

前端cshtml代码

<div>
    <embed src="@Model.CvCandidature" type="application/pdf" height="700" width="700">
</div>
解决方案

核心问题是当前存储的是服务器本地的物理绝对路径,浏览器无法直接访问该路径,必须存储可被浏览器访问的虚拟路径/相对路径。

1. 修改文件保存方法,返回虚拟路径

将SaveToPhysicalLocation方法修改为返回站点虚拟路径,而非物理绝对路径:

private string SaveToPhysicalLocation(HttpPostedFileBase file)
{
    if (file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);
        // 定义相对于站点根目录的虚拟路径
        var virtualPath = "~/CandidatCvs/" + fileName;
        // 转换为物理路径用于文件保存
        var physicalPath = Server.MapPath(virtualPath);
        file.SaveAs(physicalPath);
        // 返回虚拟路径到数据库存储
        return virtualPath;
    }
    return string.Empty;
}

2. 前端转换虚拟路径为可访问URL

在cshtml页面中,使用Url.Content方法将虚拟路径转换为浏览器可识别的绝对URL:

<div>
    <embed src="@Url.Content(Model.CvCandidature)" type="application/pdf" height="700" width="700">
</div>

修改完成后,数据库中存储的是~/CandidatCvs/xxx.pdf格式的虚拟路径,前端通过Url.Content转换为浏览器能访问的路径,即可正常加载PDF文件。

内容的提问来源于stack exchange,提问作者ayman jarmoune

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:05:21