В ASP.NET, что может вызвать сбой в работе с изображениями при использовании Fx или chrome, но при использовании IE? - PullRequest
0 голосов
/ 17 января 2011

Я в довольно необычном рассоле. Я изменяю загрузчик изображений, и я думал, что он работает. Нужно было:

  1. взять файл с клиента и загрузить его на сервер.
  2. Если файл является изображением, выполните над ним операции по изменению размера.
  3. Если файл является изображением, создайте миниатюру.

То, что у меня есть, прекрасно работает при загрузке изображений с помощью Internet Explorer 8. Но когда я загружаю изображения с помощью Chrome или Firefox3. +, Изображение загружается, но шаги 2 и 3 не выполняются. Я не получаю никаких ошибок сервера или чего-то еще. Поскольку шаги 2 и 3 выполняются на сервере, я понятия не имею, как их может повлиять изменение в браузере.

Я не уверен, имеет ли это какое-либо отношение к моей проверке, является ли файл изображением или нет. Но, ради тщательности, вот код, который я использую:

try
{
    string Filename = FileSystemUtilities.CleanupFilename(Path.GetFileName(hpf.FileName));
    Filename = hpf.FileName;
    string FileToSave = DestDir + Path.DirectorySeparatorChar + Path.GetFileName(Filename);
    hpf.SaveAs(FileToSave);
    bool IsImageFileType = ImageUtilities.IsImage(Filename, imageExtensions);

    // below does not seem to execute when using non ie browser
    // everything is smooth sailing when using ie.
    if (IsImageFileType)
    {
        ImageUtilities.ResizeImageIfNecessary(FileToSave, mainMaxWidth, mainMaxHeight);
        ImageUtilities.CreateThumbnail(FileToSave, thumbMaxWidth, thumbMaxHeight);
    }

    ValidOperation++;
    sb.AppendFormat("{0} uploaded successfully<br/>", Filename);
}

Есть мысли? Почему код на стороне сервера ведет себя по-разному в зависимости от браузера?

Редактировать: ImageUtilities.IsImage ()

    public static bool IsImage(string file, string[] imageExtensions)
    {
        file = Path.GetFullPath(file);

        if (File.Exists(file))
        {
            string CurrentFileExtension = Path.GetExtension(file);
            return imageExtensions.Count(x => x == CurrentFileExtension) > 0 ? true : false;
        }
        else
        {
            return false; //file doesn't exist
        }
    }

1 Ответ

1 голос
/ 17 января 2011

Эта разница может быть вызвана различием в имени файла, отправляемом браузерами.
Например, некоторые браузеры включают полный путь.

Ваша функция ImageUtilities.IsImage не может обработать отправленное имя файлане браузерами IE.

РЕДАКТИРОВАТЬ : Ваша функция очень неправильная.
Измените ее на

return imageExtensions.Contains(Path.GetExtension(file), 
                                StringComparer.OrdinalIgnoreCase);
...