2011-06-08 78 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); 
相關問題