asp.net - 如何将 URL 路径映射到 asp.net 网站中的物理路径
问题描述
我在 ASP.NET MVC 网站的根目录中有一个ImageUpload文件夹,在 Windows 上运行并托管在 AWS 上。
显示图像时,我需要这样的东西:
<img src="/ImageUpload/MyImage.jpg" alt="">
上传图片时,我需要一个物理路径...
string fullPath = System.IO.Path.Combine("C:\\MyWebsiteRoot\\ImageUpload", MyImage.jpg);
file.SaveAs(fullPath);
我想把路径放在我的 web.Config 中:
<!-- 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.Config 中以既可用作物理路径又可用作 url 路径的方式定义ImageUpload路径?还是我需要在我的 Web.Config 中定义 2 个不同的变量?
解决方案
您可以在应用程序设置中存储您的图像文件夹(存在于您的应用程序根目录中)名称,并使用它来保存和渲染图像
<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" />
推荐阅读
- php - 如何将哈希密码验证更改为普通密码?
- c# - 打开一个动态创建的按钮时,所有按钮都打开
- java - 我应该使用 try/catch 吗?
- c# - 如何在使用 MS Access 和 OleDb 连接的 Insert Into 命令期间返回主键值?
- python - windows系统托盘图标作为服务
- java - 无法使用 selenium Java 选择下拉值
- excel - 过滤后如何在表格中获取可见单元格的值 - 仅适用于第一个值
- mysql - Maria 数据库中的行锁定
- javascript - 根据所选选项更改字体大小
- typescript - 如何在 TypeScript 中覆盖量角器的 jasmine.Spec.prototype.addExpectationResult?