2009-09-14 8 views
0

J'ai une galerie d'images que j'ai créée en lisant le contenu d'un répertoire. Maintenant tout de suite j'ai remarqué un problème quand il y avait un "+" dans le nom de fichier. Comme "glas + door.jpg" casserait. J'ai donc pensé que c'était un problème d'encodage et puisque c'était seulement le signe "+" je pensais que remplacer le "+" par "% 2b" résoudrait le problème. Localement le problème a été résolu mais quand je l'ai téléchargé sur mon hôte, j'ai remarqué que remplacer le signe "+" par "% 2b" ne fonctionnait plus.Asp.net: encodage de chemin

Voilà où j'ai commencé à regarder les possibilités d'encodage d'ASP.NET. J'ai trouvé Server.UrlEncode et Server.UrlPathEncode. Cela m'a donné des résultats mitigés comme des images qui fonctionnaient auparavant ne fonctionneraient plus.

Alors, quelle est la bonne façon d'encoder un chemin et pourquoi le remplacement a-t-il fonctionné sur mon PC mais pas dans mon environnement d'hébergement?

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; } 
} 

La fonction GetImages() obtient jpg, gif et png FileInfo s à partir d'un certain répertoire. Si nécessaire, je peux également poster cette partie du code.

Si cela aide, here vous pouvez voir comment les images se brisent. C'est avec Replace("+", "%2b").

Merci d'avance.

+1

Server.UrlEncode est le chemin à parcourir. Question: avez-vous besoin du chemin complet de l'image à attribuer aux attributs src de l'image? RenderImages.Add (nouveau FileInfo {path = "/" + Server.UrlEncode (Nom du dossier + "/" + Image.Name), name = ImageName}); mieux travailler? –

+0

Oui, j'ai besoin du chemin complet. J'ai essayé d'encoder seulement le nom de fichier et image.name et cela semble aussi fonctionner localement mais sur mon hôte il casse toutes les images. – Pickels

Répondre

0

Le problème est que l'espace peut être échappé comme + dans URL: s et il n'y a aucun moyen pour un serveur de dire si vous voulez vraiment dire + ou espace. Même lorsqu'il est codé en% 2b, il peut s'agir d'un double espace codé, il apparaîtra donc comme un espace lorsqu'il sera décodé. Pour résoudre ce problème, vous pouvez remplacer manuellement "+" par "% 252b", qui sera décodé correctement en tant que +.

0

Ce n'est pas une vraie solution à mon problème mais j'ai simplement remplacé tous les signes "+" par "plus". Dans la capture des images, je l'ai remplacé par "+". C'est juste un travail parce que je n'étais pas capable de résoudre mon problème.