Общая ошибка в GDI+

У меня есть функция загрузки изображений, которая отлично работает на локальном хосте, но когда я пытаюсь запустить ее под Windows Server 2003, я получаю сообщение об ошибке.

Это код..

Теперь, прежде чем кто-нибудь прыгнет на меня;) Я просмотрел предыдущие ответы и проверил все разрешения, и они кажутся правильными ... папка / пути существуют и т. д.

ImageService imageService = new ImageService();

if (fileBase != null && fileBase.ContentLength > 0 && fileBase.ContentLength <= 2097152 && fileBase.ContentType.Contains("image/"))
{
    var uploadedPath = "~/Assets/Images/";

    Path.GetExtension(fileBase.ContentType);
    var extension = Path.GetExtension(fileBase.FileName);

    if (extension.ToLower() != ".jpg" && extension.ToLower() != ".gif") // only allow these types
    {
        photoViewModel.ImageValid = "Not Valid";
        ModelState.AddModelError("Photo", "Wrong Image Type");
        return View(photoViewModel);
    }

    EncoderParameters encodingParameters = new EncoderParameters(1);
    encodingParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

    ImageCodecInfo jpgEncoder = imageService.GetEncoderInfo("image/jpeg");
    var uploadedimage = Image.FromStream(fileBase.InputStream, true, true);

    Bitmap originalImage = new Bitmap(uploadedimage);
    Bitmap newImage = new Bitmap(originalImage, 274, 354);

    Graphics g = Graphics.FromImage(newImage);
    g.InterpolationMode = InterpolationMode.HighQualityBilinear;
    g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);

    var streamLarge = new MemoryStream();
    newImage.Save(streamLarge, jpgEncoder, encodingParameters);

    var fileExtension = Path.GetExtension(extension);
    string newname;
    if (photoViewModel.photoURL != null)
    { newname = photoViewModel.photoURL; }
    else
    { newname = Guid.NewGuid() + fileExtension; }

    var ImageName = newname;
    newImage.Save(Server.MapPath(uploadedPath) + ImageName);
    System.IO.File.WriteAllBytes(Server.MapPath(uploadedPath) + ImageName, streamLarge.ToArray());

    photoViewModel.uploadedPath = uploadedPath;
    photoViewModel.photoURL = ImageName;

    originalImage.Dispose();
    newImage.Dispose();
    streamLarge.Dispose();
    return View(photoViewModel);
}

person beebul    schedule 05.01.2012    source источник
comment
Я знаю, вы сказали не прыгать, но просто чтобы исключить возможность плохих разрешений, не могли бы вы просто попробовать написать тестовый файл (любой контент) в том же месте.   -  person George Duckett    schedule 05.01.2012
comment
Если вы получаете сообщение об ошибке, пожалуйста, добавьте, какое сообщение вы получаете   -  person Renatas M.    schedule 05.01.2012
comment
@Reniuz: в GDI+ произошла общая ошибка   -  person beebul    schedule 05.01.2012
comment
Добавлено разрешение на запись для учетной записи сетевой службы? Найдены некоторые подробности о вашей проблеме .aspx" rel="nofollow noreferrer">Здесь   -  person Renatas M.    schedule 05.01.2012
comment
Я только что попробовал это, спасибо Reniuz, но это не решило проблему.   -  person beebul    schedule 05.01.2012
comment
Спасибо, ребята, проблема решена :) очень признателен.   -  person beebul    schedule 06.01.2012


Ответы (1)


При использовании Image.FromStream поток должен оставаться открытым в течение всего времени существования образа. Это означает, что если поток является файлом, файл будет оставаться открытым. Я думаю, вам нужно удалить uploadedImage, чтобы разрешить закрытие потока (если вы ждете, пока GC очистит uploadedImage, это произойдет в неопределенный момент в будущем или может не произойти вообще).

person Jason Williams    schedule 05.01.2012
comment
Я бы не рекомендовал это (это использование кувалды, чтобы расколоть орех). Просто утилизируйте его, когда он не нужен. - person Jason Williams; 06.01.2012
comment
Спасибо, это помогло Ура Джейсону! - person beebul; 06.01.2012