ASP.NET ошибка на растровом изображении.Исключение "сохранить" (0x80004005): в GDI+произошла общая ошибка."
У меня есть функция, которая сначала считывает изображение с диска, изменяет его размер, а затем сохраняет в другой каталог.
Когда я использую растровое изображение.Save (directory + theimagename) возвращает ошибку, как я указал в заголовке вопроса.
Я проверил, что каталог правильный, и имя данного изображения не существует в этом dir.
Странно то, что один и тот же код отлично работает на локальной машине. но когда я загружаю его на свой общий хостинг, он просто не работает.
В код приведен ниже.
bmpOut = new Bitmap(Size, Size);
Graphics g = Graphics.FromImage(bmpOut);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White, 0, 0, Size, Size);
int topBottomPadding = 0; int leftRightPadding = 0;
if (Size > lnNewWidth + 1)
leftRightPadding = Convert.ToInt32((Size - lnNewWidth) / 2);
else if (Size > lnNewHeight + 1)
topBottomPadding = Convert.ToInt32((Size - lnNewHeight) / 2);
g.DrawImage(loBMP, leftRightPadding, topBottomPadding, lnNewWidth, lnNewHeight);
Bitmap bmp = new Bitmap(bmpOut);
if (bmp != null)
bmp.Save(ResizedOutput); // C:InetpubvhostsDomainNamehttpdocsProductImages500pxgigabyte_ga_ep45_ds4_profilelarge[1].jpg
bmp.Dispose();
bmpOut.Dispose();
g.Dispose();
loBMP.Dispose();
Трассировка стека:
[ExternalException (0x80004005): A generic error occurred in GDI+.]
System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +377630
System.Drawing.Image.Save(String filename, ImageFormat format) +69
System.Drawing.Image.Save(String filename) +25
Utilities.ResizeImage(String fileName, String mode) in c:inetpubvhostsbatuhanakcay.comhttpdocsApp_CodeUtilities.cs:181
Link.ToProductImage(String fileName) in c:inetpubvhostsbatuhanakcay.comhttpdocsApp_CodeLink.cs:79
Product.PopulateControls(ProductDetails pd) in c:inetpubvhostsbatuhanakcay.comhttpdocsProduct.aspx.cs:37
Product.Page_Load(Object sender, EventArgs e) in c:inetpubvhostsbatuhanakcay.comhttpdocsProduct.aspx.cs:20
2 ответа:
Из ASP Net-GDI+ и сохранить JPG или BMP на сервере
В 99,9% случаев при использовании GDI "произошла общая ошибка" означает, что каталог, который вы пытаетесь сохранить в не имеет соответствующих разрешений. Как правило, вы должны убедиться, что каталог позволяет asp.net чтобы модифицировать файлы.
Вы проверили разрешения?
Эта ошибка также возникает при попытке сохранения в сетевом ресурсе. Единственное решение, чтобы исправить это, - переместить растровое изображение в поток памяти и сохранить его вместе с потоком файлов в сетевом ресурсе.
Вот метод расширения, чтобы легко исправить это:
public static void SaveOnNetworkShare(this System.Drawing.Image aImage, string aFilename, System.Drawing.Imaging.ImageFormat aImageFormat) { using (System.IO.MemoryStream lMemoryStream = new System.IO.MemoryStream()) { aImage.Save(lMemoryStream, aImageFormat); using (System.IO.FileStream lFileStream = new System.IO.FileStream(aFilename, System.IO.FileMode.Create)) { lMemoryStream.Position = 0; lMemoryStream.CopyTo(lFileStream); } } }