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
相关产品推荐
相关产品推荐

