2009-09-14 71 views
0

我有一個圖片庫,我通過閱讀目錄內的內容創建。現在馬上我注意到文件名中有一個「+」的問題。就像「glas + door.jpg」會打破。所以我認爲這是一個編碼問題,因爲它只是「+」符號,我認爲用「%2b」代替「+」可以解決問題。本地問題已修復,但是當我將其上傳到我的主機時,我注意到用「%2b」替換「+」符號不再有用。Asp.net:路徑編碼

所以這就是我開始研究ASP.NET的編碼可能性的地方。我發現Server.UrlEncodeServer.UrlPathEncode。這給了我一些混合的結果,像以前工作的圖像不再工作。

那麼編碼路徑的正確方式是什麼?爲什麼替換「技巧」在我的PC上運行,但不在我的託管環境中?

public List<fileInfo> RenderImages() 
{ 
    List<fileInfo> RenderImages = new List<fileInfo>(); 
    var Images = GetImages(); 

    if (Images != null) 
    { 
     foreach (var Image in Images) 
     { 
      string FullPath = Path + FolderName + "/" + Image.Name.Replace("+", "%2b"); 
      string ImageName = Image.Name.Replace(Image.Extension, string.Empty); 

      RenderImages.Add(new fileInfo { path = FullPath, name = ImageName }); 
     } 
    } 

    return RenderImages; 
}  

public class fileInfo 
{ 
    public string path { get; set; } 
    public string name { get; set; } 
} 

GetImages()函數獲取JPG,GIF和PNG從某個目錄FileInfo秒。如果需要,我也可以發佈那部分代碼。

如果有幫助,here你可以看到圖像如何分解。這是與Replace("+", "%2b")

在此先感謝。

+1

Server.UrlEncode是要走的路。問題:你需要將圖像的完整路徑分配給圖像的src屬性嗎? RenderImages.Add(new FileInfo {path =「/」+ Server.UrlEncode(FolderName +「/」+ Image.Name),name = ImageName});工作更好? – 2009-09-14 22:52:12

+0

是的,我需要完整的路徑。我試着編碼只有文件夾名稱和image.name,這似乎也在本地工作,但在我的主機它打破了所有的圖像。 – Pickels 2009-09-14 23:12:18

回答

0

問題是空間可以在URL中以+的形式轉義出來,並且服務器沒有辦法告訴你是否真的意味着+或空間。即使編碼爲%2b,它也可能是一個雙重編碼空間,所以它在解碼時仍然會作爲空間出現。

要解決這個問題,您可以手動將「+」替換爲「%252b」,它將正確解碼爲+。

0

這不是一個真正的解決我的問題,但我只是用「加號」替換所有的「+」符號。在拍攝的圖像中,我用「+」替換了它。這只是一個解決辦法,因爲我無法解決我的問題。