2011-06-08 80 views
6

我使用asp.net 4和c#。将物理路径转换为相对的http:// localhost:

我有这段代码可以让我找到图像的物理路径。 正如你所看到的,我得到了我的机器物理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

是否有一个原因,你不能只使用相对路径(/统计/ Cms/....)? – 2011-06-08 09:55:12

+0

感谢Dave的评论,但我需要转换pathRaw的结果,我不能在我的代码中隐式使用相对路径。你有什么想法如何做到这一点?感谢adnvace – GibboK 2011-06-08 10:02:21

+0

你无法动态地将物理路径转换为URL - 只有当你知道可能的根值,以及它们最终映射到哪个URL,然后做了一些字符串操作来替换根路径部分与网址,然后反斜线与反斜线......但我仍然不理解为什么你需要使用物理路径来到你的网址?当然,如果这是在ASP.NET应用程序中运行,那么您可以使用相对路径来提供图像? – 2011-06-08 10:17:30

回答

11

最简单的事情就是摆脱物理应用程序路径的URL。 如果你不能在你的代码中做到这一点,就把它从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)将虚拟路径转换为输出到浏览器的相对路径。

0

你可以使用Server.MapPath来做到这一点。

string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“); 
+0

我需要转换变量pathRaw ...任何想法? – GibboK 2011-06-08 10:01:21

+0

这不是他要求的 - 他已经有物理路径并需要将其转换为URL - 这是不可能的。我认为他正在接近这个错误的方式。 – 2011-06-08 10:15:13

+0

同意戴夫 - 问题是如何从物理到虚拟。 – Losbear 2012-08-16 17:12:36

0

利用 ApplicationPath - 获取服务器上的ASP.NET应用程序的虚拟应用程序的根路径。

​​
+0

Pranay我与你的代码(我需要处理pathRaw变量)trid和这是结果:http:// localhost:1108/C:/....../f005aba1-e286-4d9e-b9db-e6239f636e63。 jpg 你有什么想法如何解决它?谢谢 – GibboK 2011-06-08 10:07:08

+0

我想你忘了设置'' – eFloh 2011-06-08 11:17:58

1

获取使用Request.ApplicationPath 然后使用回答this question得到一个相对路径您的应用程序的根。

它可能需要一点调整,但它应该允许你做你以后的事情。

1

左条由Request.ApplicationPath您pathRaw内容和建设使用

Uri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath); 
相关问题