我使用asp.net 4和c#。
我有这段代码,可以让我找到图像的物理路径。 如你所见,我得到了我的机器物理pagh文件:/// C:。
string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\";
结果:
file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg
但是我需要在我的Web应用程序的前端显示这个图像,所以我需要这样的结果:
http://localhost:1108/Statics/Cms/Front-End/Images/Raw/f005aba1-e286-4d9e-b9db-e6239f636e63.jpg
怎么做?
PS:我需要转换变量pathRaw的结果。
希望我能够表达自己,不幸的是我在这种情况下不确定术语。
感谢您的帮助!
答案 0 :(得分:12)
最简单的方法是摆脱物理应用程序路径。 如果您不能在代码中执行此操作,只需将其从pathRaw变量中删除即可。像这样:
public string GetVirtualPath( string physicalPath )
{
if ( !physicalPath.StartsWith( HttpContext.Current.Request.PhysicalApplicationPath ) )
{
throw new InvalidOperationException( "Physical path is not within the application root" );
}
return "~/" + physicalPath.Substring( HttpContext.Current.Request.PhysicalApplicationPath.Length )
.Replace( "\\", "/" );
}
代码首先检查路径是否在应用程序根目录中。如果没有,则无法找到该文件的URL,因此会抛出异常。
虚拟路径是通过剥离物理应用程序路径,将所有反斜杠转换为斜杠并在路径前加"~/"
来构造的,以表明它应该被解释为相对于应用程序根目录。
之后,您可以使用ResolveClientUrl(virtualPath)将虚拟路径转换为相对路径以输出到浏览器。
答案 1 :(得分:1)
使用Request.ApplicationPath获取应用程序的根目录 然后使用this question的答案来获得相对路径。
可能需要稍微调整一下,但它应该允许你做你想要的事情。
答案 2 :(得分:1)
通过Request.ApplicationPath左键剥离您的pathRaw内容,并使用
构建URLUri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath);
答案 3 :(得分:0)
利用
ApplicationPath
- 获取ASP.NET应用程序在服务器上的虚拟应用程序根路径。
Label1.Text = Request.ApplicationPath;
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif";
答案 4 :(得分:-1)
您可以使用Server.MapPath。
string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“);