2009-09-14 2 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}); 더 잘 작동합니까? –

+0

네, 전체 경로가 필요합니다. 난 단지 foldername과 image.name 인코딩 시도하고 또한 로컬로 작동하지만 내 호스트에서 모든 이미지가 손상된 것 같습니다. – Pickels

답변

0

문제는 공간을 URL :에서 +로 이스케이프 처리 할 수 ​​있기 때문에 서버가 실제로 + 또는 공간을 의미하는지 여부를 알 수있는 방법이 없다는 것입니다. % 2b로 인코딩 된 경우에도 이중 인코딩 공간이 될 수 있으므로 디코딩 할 때 여전히 공간으로 나타납니다.

이 문제를 해결하려면 "+"를 % 252b 대신 수동으로 바꿔 +로 올바르게 디코딩하면됩니다.

0

내 문제에 대한 진정한 해결책은 아니지만 모든 "+"기호를 "+"로 바꿨습니다. 이미지 캡쳐에서 나는 그것을 "+"로 대체했다. 내 문제를 해결할 수 없어서 해결할 수 있습니다.