使用MVC中数据库中的URL从文件夹加载图像

时间:2016-03-10 20:33:15

标签: c# asp.net asp.net-mvc

ASP.NET MVC申请中,file已成功保存到文件夹,其URL已保存到SQL databaseURLAbsolute 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>

有人可以记下问题并做出相应的指导吗?

3 个答案:

答案 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文件夹外创建一个新文件夹。

您现在可以通过两种方式访问​​图像

  1. 相对路径 示例:../photos/5.png
  2. 绝对路径 例: [http://localhost:portnumber/photos/5.png]
  3. 有用的提示:运行应用程序后,您可以使用浏览器中的绝对路径查看图像是否可访问。如果您无法访问它,将告诉您尝试搜索该图像的物理路径。通过这种方式,您可以轻松修复绝对路径。

答案 2 :(得分:0)

替换现有的行 -

TempData["filePath"] = fpath;

使用

TempData["filePath"] = Url.Content("~/App_Data/photos/" + fileName);