如何在asp.net网站中将URL路径映射到物理路径



我的ASP根目录中有一个ImageUpload文件夹。NET MVC网站,运行在Windows上,托管在AWS上。

当显示图像时,我需要这样的东西:

<img src="/ImageUpload/MyImage.jpg" alt="">

上传图像时,我需要一个物理路径。。。

string fullPath = System.IO.Path.Combine("C:\MyWebsiteRoot\ImageUpload",  MyImage.jpg);
file.SaveAs(fullPath);

我想把路径放在我的网上。配置:

<!-- if I use a url path, the save won't work -->
<add key="ImageUploadPath" value="/ImageUpload"></add>
<!-- if I use physical path, the display won't work -->
<add key="ImageUploadPath" value="C:\MyWebsiteRoot\ImageUpload"></add>

是否可以在Web中定义ImageUpload路径。以一种既可以用作物理路径又可以用作url路径的方式进行配置?或者我需要在我的Web中定义两个不同的变量吗。配置?

您只需将您的图像文件夹(位于应用程序根目录中(名称存储在应用程序设置中,并使用该名称保存和渲染图像

<add key="ImageUploadPath" value="ImageUpload"></add>

当您保存上传的文件时,读取这个值并使用它来构建路径。您可以创建一个类似"~/ImageUploadPath"的字符串,并将其传递给Server.MapPath方法,该方法将返回与您传递给它的虚拟路径相对应的物理文件路径。

var fileName = "yourImageFileName.jpg";
var directory = ConfigurationManager.AppSettings["ImageUploadPath"];
var path = Path.Combine(Server.MapPath("~/" + directory), fileName);
model.Image.SaveAs(path);

渲染图像时,使用相同的方法读取目录名并渲染图像src值。

例如,

public ActionResult Profile(int userId)
{
var user = db.Users.Find(userId);
var vm = new UserProfileVm { FirstName = user.FirstName , Id = user.Id };
vm.ProfileImage = GetImagePath(vm.ImagePath);
return View(vm);
}
private string GetImagePath(string imageName)
{
return ConfigurationManager.AppSettings["ImageUploadPath"] + "/" + imageName;
}

在你看来,

@model UserProfileVm
<img src="~/@Model.ProfileImage" alt="@Model.FirstName" />

相关内容

  • 没有找到相关文章

最新更新