在 asp.net 中将绝对路径替换为相对路径

Replace absolute to relative path in asp.net

我在ASP.NETMVC 4.5.2中有上传功能怎么上传图片到~/Uploads/。

当我想用下面的代码显示图像时:

<img src="@item.ImagePath" alt="Image" />

我得到:

<img src="c:\users\yanni\documents\visual studio 2015\Projects\MyProject\MyProject\Uploads/references/postfinance.PNG" alt="Image" />

我的问题是如何用“~/Uploads/filename.ext”替换 c:\users ...。

也许重要的是要说明:在我的数据库中,我有完整的 link: c:\users\yanni\documents\visual studio 2015\Projects\MyProject\MyProject\Uploads/references/postfinance.PNG

由此 ControllerCode 引用:

references.ImagePath = HttpContext.Request.PhysicalApplicationPath + "Uploads/references/" + ImagePath.FileName;
ImagePath.SaveAs(references.ImagePath);

感谢您的帮助

我真的不明白为什么你说你上传到“~/Uploads”,但后来你将ImagePath存储为"Uploads/references/..."。你为什么附加那个目录?你把那个文件移到那里吗?

总的来说:我最好将图片路径作为相对路径存储在数据库中,这样您可以随时重新定位项目。

var fileName = "~/Uploads/" + ImagePath.FileName;
references.ImagePath = fileName;

如果您需要服务器上图像的绝对路径(这取决于您的项目在服务器上的位置),您可以通过

在控制器中获取它
var realPath = Server.MapPath(fileName);

感谢这种方法将此代码:

 <img src="@item.ImagePath" alt="Image" />

渲染到:

 <img src="~/Uploads/postfinance.PNG" alt="Image" />

这可能是你想要的...

解决方案成立:

public ActionResult Create([Bind(Include = "ID,Compagny,Website,Logo")] References references, HttpPostedFileBase ImagePath)
        {
            if (ModelState.IsValid)
            {
                var fileName = Path.GetFileName(ImagePath.FileName);
                references.ImagePath = "/Uploads/References/" + fileName;
                ImagePath.SaveAs(Server.MapPath("~/Uploads/References/" + fileName));

                db.References.Add(references);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(references);
        }

尝试这样的事情:

<img src="@Url.Content("~/Uploads/Image.png")" />

如果你想根据当前请求获取图片

<img src="@Url.Content("~/Uploads/" + FileName)" />

其中文件名只是图像的名称或

<img src="@Url.Content("~/Uploads/" + System.IO.Path.GetFileName(@item.ImagePath))" />