在ASP.NET MVC
申请中,file
已成功保存到文件夹,其URL
已保存到SQL database
。 URL
以Absolute URL
格式保存,即(D:\ Visual Studio Projects \ HRMS \ HRMS \ App_Data \ photos \ 5.png)。使用此file
在文件夹中的浏览器中加载URL
时出现问题。代码实现是:
[HttpPost]
[ActionName("UploadPhoto")]
public ActionResult UploadPhoto(HttpPostedFileBase photoPath)
{
var fileName = Path.GetFileName(photoPath.FileName);
if (photoPath.ContentLength > 0)
{
var path = Path.Combine(Server.MapPath("~/App_Data/photos"), fileName);
photoPath.SaveAs(path);
}
ViewBag.upload = "Success! Photo was uploaded successfully.";
string fpath = Path.Combine(Server.MapPath("~/App_Data/photos"), fileName);
TempData["filePath"] = fpath;
return RedirectToAction("CreateWithImage", new { path = fpath });
}
public ActionResult CreateWithImage(string path)
{
employee em = new employee();
em.districts = new SelectList(hc.districts, "name", "name");
string fp = Convert.ToString(TempData["filePath"]);
em.photoPath = fp;
return View(em);
}
file(image)在视图中呈现为:
@model HRMS.Models.employee
<dd>
<img src="@Url.Content(@Model.photoPath)" />
</dd>
调用View时,我看到图像的链接断开。加载页面(View)的HTML(具有正确的文件路径)被视为:
<dd>
<img src="D:\Visual Studio Projects\HRMS\HRMS\App_Data\photos\5.png" />
</dd>
有人可以记下问题并做出相应的指导吗?
答案 0 :(得分:1)
这不是一个URL,它是一个文件系统路径:
D:\Visual Studio Projects\HRMS\HRMS\App_Data\photos\5.png
这两者是截然不同的事情。您可能能够使用file://
网址,可能:
file://D/Visual Studio Projects/HRMS/HRMS/App_Data/photos/5.png
但是使用实际网址会更有意义。类似的东西:
/App_Data/photos/5.png
(或绝对网址,相对于当前网页的内容等)
因此保存路径可能看起来更像这样:
var path = VirtualPathUtility.ToAbsolute("~/App_Data/photos/" + fileName);
答案 1 :(得分:0)
从App_Data文件夹中删除Image,因为它是隐藏的Segment部分,因此拒绝该应用程序访问该文件夹。
只需在app_data文件夹外创建一个新文件夹。
您现在可以通过两种方式访问图像
../photos/5.png
有用的提示:运行应用程序后,您可以使用浏览器中的绝对路径查看图像是否可访问。如果您无法访问它,将告诉您尝试搜索该图像的物理路径。通过这种方式,您可以轻松修复绝对路径。
答案 2 :(得分:0)
替换现有的行 -
TempData["filePath"] = fpath;
使用
TempData["filePath"] = Url.Content("~/App_Data/photos/" + fileName);