2016-08-22 5 views
-1

Я пытаюсь сохранить изображение, который я создал из растрового изображения в заданном пути в моем проекте, но я получаю эту ошибку: Additional information: A generic error occurred in GDI+.ASP.NET MVC Ошибка при сохранении изображения

Это код:

 public void SaveCaptchaImage(string name) 
     { 
      Bitmap image = new Bitmap(128, 64); 
      string path = "/content/images"; 

      if (System.IO.File.Exists(path + name)) 
       System.IO.File.Delete(path + name); 

      using (Pen myPen = new Pen(Color.Red, 5)) 
      using (Brush myBrush = new SolidBrush(Color.Silver)) 
      using (Font myFont = new Font("Arial", 16)) 
      using (Graphics graphObject = Graphics.FromImage(image)) 
      { 
       graphObject.FillRectangle(myBrush, new Rectangle(0, 0, 128, 64)); 
       graphObject.DrawString(GetRandomCaptcha(), myFont, myBrush, new Point(20, 20)); 
       image.Save(path + name + ".png", ImageFormat.Png); 
      } 
      image.Dispose(); 
     } 

исключение происходит на этой линии:

image.Save(path + name + ".png", ImageFormat.Png); 

Что я могу сделать, чтобы решить эту проблему?

Редактировать: Я не понимаю, почему я получил downvoted, но хорошо.

+0

Я предлагаю вам всегда использовать 'Path.Combine', чтобы комбинировать пути, а не просто конкатенировать строки, потому что, если' name' не начинается с косой черты, вы закончите с 'image.Save (" pathname.png ", ImageFormat.Png);' а не 'image.Save (" путь/имя.png ", ImageFormat.Png);' – stuartd

ответ

0

Оберните свой путь с Server.MapPath как:

image.Save(HttpContext.Current.Server.MapPath(Path.Combine(path, name + ".png")), ImageFormat.Png); 

, чтобы получить абсолютный путь вместо относительной.

и использовать Path.Combine метод, подобный @stuartd, предложенный в комментариях.