Получение Общая ошибка произошла в GDI + при сохранении изображения в виртуальную папку на сервере ASP.NET

У меня есть следующая кодировка для изменения размера изображения, а затем для сохранения моей виртуальной папки «vicpic / scimages»

  if (FileUpload5.PostedFile != null)
    {
        if (FileUpload5.PostedFile.ContentLength > (1024 * 1024))
        {
            Label4.Text = "Upload status: The file has to be less than 1 MB. Please resize your photo and than upload it again.";
        }
        else
        {
            System.Drawing.Image imageToBeResized = System.Drawing.Image.FromStream(FileUpload5.PostedFile.InputStream);
            int imageHeight = imageToBeResized.Height;
            int imageWidth = imageToBeResized.Width;
            int maxHeight = 660;
            int maxWidth = 560;
            imageHeight = (imageHeight * maxWidth) / imageWidth;
            imageWidth = maxWidth;
            if (imageHeight > maxHeight)
            {
                imageWidth = (imageWidth * maxHeight) / imageHeight;
                imageHeight = maxHeight;
            }
            Bitmap bitmap = new Bitmap(imageToBeResized, imageWidth, imageHeight);
            System.IO.MemoryStream stream = new MemoryStream();
            // bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            stream.Position = 0;
            byte[] image = new byte[stream.Length + 1];
            stream.Read(image, 0, image.Length);

            string FileName = Path.GetFileName(FileUpload5.PostedFile.FileName);
            //Save files to disk
            string extension = Path.GetExtension(FileUpload5.PostedFile.FileName);
            //Path.Combine(Server.MapPath("~/vicpic/scimages"), imageName);
            string imagename = DropDownList2.SelectedItem.Text + "4" + extension;


            bitmap.Save(Server.MapPath("~/vicpic/scimages/") + imagename);

            bitmap.Dispose();
            imageToBeResized.Dispose();
            GC.Collect();



            try
            {
                con.Open();
                cmd.ExecuteNonQuery();
            }

            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            finally
            {
                con.Close();
                con.Dispose();
                Label4.Text = "Upload status:Successfully.";

            }
        }

    }

но он показывает, что в GDI + произошла общая ошибка

Кто-нибудь может подсказать, в чем проблема?

Я хочу сохранить изображение в папке «vicpic / scimages» на моем хост-сервере. это виртуальный каталог, и я также предоставил все разрешения, необходимые для каталога.


person jackerj    schedule 02.07.2012    source источник
comment
Пожалуйста, опубликуйте полное сообщение об ошибке   -  person HatSoft    schedule 02.07.2012
comment
этот vicpic / scimages находится в папке httpdocs   -  person jackerj    schedule 02.07.2012
comment
Возможно, у вас нет разрешения на запись / создание файла.   -  person kv-prajapati    schedule 02.07.2012
comment
нет, у меня есть все права доступа к каталогу.   -  person jackerj    schedule 02.07.2012
comment
Общая ошибка произошла в GDI +. это МОЕ СООБЩЕНИЕ ОБ ОШИБКЕ   -  person jackerj    schedule 02.07.2012
comment
Какая строка вызывает ошибку?   -  person Steve B    schedule 02.07.2012
comment
Вам следует не вызывать GC.Collect () самостоятельно   -  person Steve B    schedule 02.07.2012
comment
@khyatipatel, пожалуйста, перехватите ошибку в блоке try / catch и опубликуйте строку .Message свойство ошибки   -  person HatSoft    schedule 02.07.2012
comment
Согласитесь с @SteveB и попробуйте заменить явное Dispose на uses.   -  person George Mamaladze    schedule 02.07.2012


Ответы (2)


Я была такая же проблема. Похоже, что поток памяти, в котором был создан объект, должен быть открыт во время сохранения объекта. Чтобы не дублировать код и текст, просто взгляните на эти вопросы и ответы: Общая ошибка произошла в GDI +, JPEG Image to MemoryStream

Итак, вместо bitmap.Save(Server.MapPath("~/vicpic/scimages/") + imagename); ваш код может выглядеть так:

using (var m = new MemoryStream())
{
       bitmap.Save(m, ImageFormat.Jpeg);
       var img = Image.FromStream(m);
       img.Save(Server.MapPath("~/vicpic/scimages/") + imagename);
}
person George Mamaladze    schedule 02.07.2012
comment
в этой строке отображается ошибка: var img = Image.FromStream (m); ниже ошибка: «System.Web.UI.WebControls.Image» не содержит определения для «FromStream» - person jackerj; 02.07.2012
comment
'System.Web.UI.WebControls.Image' не содержит определения для 'FromStream' - person jackerj; 02.07.2012
comment
Я понимаю. Вам нужно использовать другой класс изображения. msdn.microsoft.com / en-us / library / Просто добавьте пространство имен System.Drawing перед Image. - person George Mamaladze; 02.07.2012
comment
у меня есть следующее пространство имен в коде: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; используя System.IO; using System.Data.SqlClient; using System.Drawing.Imaging; using System.Drawing.Drawing2D; с помощью System.Drawing; - person jackerj; 02.07.2012
comment
Как это var img = System.Drawing.Image.FromStream(m); - person George Mamaladze; 02.07.2012

Я знаю, что это старый вопрос, но это всего лишь мой вклад, который я хочу дать, если он может помочь кому-то с той же проблемой, то это все, что я хочу. Я получил эту ошибку на одном из моих веб-сайтов, и я понятия не имел, что происходит, поэтому, найдя несколько ответов на STACK, я понял, что это была ошибка разрешения. После исправления этого все было в порядке, но затем я получил ту же ошибку на другом моем веб-сайте, и я сразу же изменил разрешение для папки, но на этот раз это не исправило. После нескольких дней борьбы я понял, что проблема заключалась только в неправильном написании имени папки.

person Julie20    schedule 20.08.2014