Asp.net: кодировка пути - PullRequest
       8

Asp.net: кодировка пути

0 голосов
/ 15 сентября 2009

У меня есть галерея изображений, которую я создал, читая содержимое в каталоге. Теперь я сразу заметил проблему, когда в имени файла был знак "+". Как бы "glas + door.jpg" сломался бы. Поэтому я подумал, что это проблема кодирования, и поскольку это был только знак «+», я подумал, что замена «+» на «% 2b» решит проблему. Локально проблема была исправлена, но когда я загрузил ее на свой хост, я заметил, что замена знака «+» на «% 2b» больше не помогает.

Так что именно здесь я начал изучать возможности кодирования ASP.NET. Я нашел Server.UrlEncode и Server.UrlPathEncode. Это дало мне смешанные результаты, например, изображения, которые работали раньше, больше не будут работать.

Так, каков правильный способ кодирования пути и почему заменяющая "хитрость" работала на моем ПК, но не в моей среде хостинга?

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 s из определенного каталога. При необходимости я также могу опубликовать эту часть кода.

Если это поможет, здесь вы можете увидеть, как ломаются изображения. Это с Replace("+", "%2b").

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 октября 2009

Проблема заключается в том, что пробел может быть экранирован как + в URL: s, и сервер не может определить, действительно ли вы имеете в виду + ​​или пробел. Даже если он закодирован как% 2b, это может быть пробел с двойным кодированием, поэтому он все равно будет выглядеть как пробел при декодировании.

Чтобы это исправить, вы можете вручную заменить «+» на «% 252b», что будет правильно декодировать как +.

0 голосов
/ 16 сентября 2009

Это не реальное решение моей проблемы, но я просто заменил все знаки «+» на «плюс». В подписи к изображениям я заменил ее обратно на «+». Это просто обходной путь, потому что я не смог решить свою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...