imagen guardar genérico generico error asp.net image stream gdi

asp.net - guardar - Se produjo un error genérico en GDI+



error genérico en gdi+ windows 7 (10)

¿Es su máquina local Vista o Windows 7 y su servidor Windows Server 2003? Creo que la implementación de GDI + es diferente, y no verá el error en los sistemas operativos más nuevos. Me estoy metiendo en este tema ahora, y ese es uno de los hechos que me he encontrado.

[ExternalException (0x80004005): A generic error occurred in GDI+.] IpitchitImageHandler.Data.ImageRepository.AddNewTempImage(Stream image, String extension, Guid PageId, Guid ImageId, ImageTransformCollection toDoTransforms) +1967 IpitchitImageHandler.Data.ImageRepository.AddNewTempImage(Stream image, String extension, Guid PageId, Guid ImageId) +85 IpitchitWeb.Sell.Controls.UploadImagesSubstep.UploadImages(Object sender, EventArgs e) in F:/Documents and Settings/Vjeran/My Documents/Visual Studio 2008/Projects/Ipitchit/IpitchitWeb/Sell/Controls/UploadImagesSubstep.ascx.cs:88 System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +111 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +79 System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

mi código es:

public void AddNewTempImage(Stream image, string extension, Guid PageId, Guid ImageId, ImageTransformCollection toDoTransforms) { //mapping steam to memory stream so it does support the seek MemoryStream targetStream = new MemoryStream(ReadStream(image, 1024)); Image ImageToTransform=null; Image transformedImage = null; string storagePath = ImageTransformManager.Config.StorageServerPhysicalPath; Uri storageUrl = new Uri(ImageTransformManager.Config.StorageServerUrl); //string TempPath = Path.Combine(storagePath, GenerateFileName(extension)); //SaveStream(TempPath, image); //File.WriteAllBytes(TempPath, ReadStream(image, 1024)); if (!HttpContext.Current.User.Identity.IsAuthenticated) throw new Exception("Nonauthenticated users image submition is not supported"); try { foreach (ImageTransform transform in toDoTransforms) { ImageRepositoryTempImage newimage = new ImageRepositoryTempImage(); newimage.ImageGuid = ImageId; newimage.PageGuid = PageId; newimage.CreatedBy = HttpContext.Current.User.Identity.Name; newimage.CreatedDate = DateTime.UtcNow; newimage.Format = transform.OutputType; newimage.Width = transform.Width; newimage.Height = transform.Height; newimage.Watermark = transform.UseWaterMark; string filename = GenerateFileName(transform.OutputType); string fullStoragePath = Path.Combine(storagePath, Path.Combine(transform.StorageFolder, filename)); string fullStorageUrl = CombineUri(storageUrl, Path.Combine(transform.StorageFolder, filename)); newimage.PhysicalStoragePath = fullStoragePath; newimage.StoragePath = fullStorageUrl; CheckOrAddImageTransform(transform); var ImgRepTransform = GetTransformation(transform); newimage.ImageRepositoryTransformation = ImgRepTransform; newimage.TransformId = ImgRepTransform.Id; Bitmap uploaded = new Bitmap(image); ImageToTransform = (Image)uploaded.Clone(); uploaded.Dispose(); transformedImage = transform.Transform(ImageToTransform); AddNewTempImage(newimage); //adding named watermark and transformation string wname = ImageTransformManager.Config.WaterMarkName; string wpath = ImageTransformManager.Config.WaterMarkPath; ChechOrAddWaterMark(wname, wpath); if (!(string.IsNullOrEmpty(wname) && string.IsNullOrEmpty(wpath))) newimage.ImageRepositoryWaterMark = GetWatermark(wname, wpath); transformedImage.Save(fullStoragePath, GetFormat(newimage.Format)); } } catch (System.Exception ex) { ErrorHandling.LogErrorEvent("Add new temp image method", ex); throw ex; } finally { //File.Delete(TempPath); if (ImageToTransform!=null) ImageToTransform.Dispose(); image.Dispose(); targetStream.Dispose(); if (transformedImage != null) transformedImage.Dispose(); } }

En mi máquina local, todo funciona, pero aún sucede ... en el servidor (2003), tengo permisos de carpeta ... y todo ...


Acabo de tener un problema similar (la misma excepción) en mi sitio web alojado: resultó ser un problema de permisos, la cuenta ASP.NET intentaba leer archivos de imágenes de un directorio fuera de su alcance disponible.

Sugiero que vuelva a verificar los permisos, así como el elemento <trust> en web.config, debe establecerse en "Medio" o superior, dependiendo de dónde se encuentren los archivos.


Acepto los permisos es el problema aquí.

servicio de red tal vez?


Asegúrese de que IIS_WPG tenga los permisos correctos en su carpeta de carga y también en ASPNET .

Solo tuve el mismo problema y esto lo solucionó.

No se olvide de propagar los permisos a través de sus subcarpetas si es necesario también (puedo haber olvidado eso ... :))


Este me siguió durante mucho tiempo. Sí, puede verificar los permisos, pero lo que también debe hacer es deshacerse de su mapa de bits correctamente.

bitmap.Dispose();


No use la ruta directa

System.Drawing.Image img = Base64ToImage(_ImagePath); img.Save(_attachmentPath, ImageFormat.Jpeg);

Use Server.MapPath y creará Directory si es necesario

System.Drawing.Image img = Base64ToImage(_ImagePath); img.Save(Server.MapPath(_attachmentPath), ImageFormat.Jpeg);


Odio ese error con pasión. Generic Error es posiblemente la descripción de error más inútil jamás escrita.

Cuando lo he encontrado, el problema siempre se ha relacionado con el archivo IO.

Esta es la lista de soluciones que guardo en mis notas: No estoy seguro de si se aplican, pero generalmente funcionan bien.

  • Compruebe la ruta del archivo
    • Asegúrese de que el directorio padre exista
    • Asegúrese de que la ruta incluya tanto el nombre de archivo como la extensión
    • Use server.MapPath () para crear la ruta
  • Asegúrese de que el archivo no se esté escribiendo en su origen. Cierre y vuelva a abrir la secuencia si es necesario.

Mis disculpas si robé esta lista de otro lado. Ha estado en mi cuaderno por un tiempo y no recuerdo de dónde vino.


Por favor, asegúrese de la ruta que está utilizando para las imágenes, también me enfrenta el mismo error. Compruebe todas las rutas que está utilizando.


Tengo el mismo error hace un momento y Google me ayudó a encontrar la respuesta: cargar / guardar mapa de bits genera el archivo bloqueado.

La solución es crear otro mapa de bits, guardar y dejar que se libere:

Bitmap tmp = new Bitmap (bitmapToBeSaved); tmp.SaveToFile (fileName);


Todos aquí (y en este sitio) han discutido esto debido a un error de permisos. He tropezado con otro sabor: memoria. Me quedé sin memoria y comencé a recibir este error también. Así que tenlo en cuenta como otra posible fuente de error.

En mi caso particular, me estaba ejecutando en una aplicación .NET y ejecutándome contra varios hilos (algunos lo suficientemente pequeños como para que el bloqueo de GDI + en todo el proceso no me impidiera demasiado). Agregar un "GC.Collect ()" después de finalizar las tareas principales no parecía afectar mucho la velocidad, pero eliminó por completo los errores de falta de memoria.