2009-09-14 91 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

这不是一个真正的解决我的问题,但我只是用“加号”替换所有的“+”符号。在拍摄的图像中,我用“+”替换了它。这只是一个解决办法,因为我无法解决我的问题。