none
Parameter is not valid.

    Pregunta

  • Buenos días,

    Espero encontrar una respuesta aqui ya que me he leído casi toda la web y no he podido encontrar una solución a mi problema.

    Resulta que estoy mostrando una imagen en una página web ASP.NET. Para hacer esto lo hago de la siguiente manera.
    1. Creé un webform y en el load le puse este código:

     

      protected void Page_Load(object sender, EventArgs e)
      {
        if (Request.QueryString["IDImagen"] == null) return;
    
        //var ta = new EmpleadoTableAdapter();
        //byte[] image = (byte[])ta.ScalarEmpleadoFoto(Convert.ToInt32(Request.QueryString["IDImagen"]));
    
        string SQL = "SELECT imagen.imagen FROM imagen INNER JOIN imagenesdocumento ON imagen.codigoimagen = imagenesdocumento.codigoimagen WHERE imagenesdocumento.codigodocumento = " + Convert.ToInt32(Request.QueryString["IDImagen"]);
        DataTable ta = new DataTable();
        Datos dt = new Datos();
    
    
        ta = dt.getdatos(SQL).Tables[0];
        byte[] image = (byte[])ta.Rows[0][0];
    
        if (image != null)
        {
          Response.ContentType = "image/jpeg";
          
          using (MemoryStream ms = new MemoryStream(image))
          {
            ms.Write(image, 0, image.Length);
            using (Bitmap jpg = (Bitmap)Bitmap.FromStream(ms,true,false))
            {
              
              jpg.Save(Response.OutputStream, ImageFormat.Jpeg);
              
            }
          }
        }
        else
        {
          Response.Write("NO");
        }
      }
    

     

    Después llamo está página y le paso por url el código del documento. Hasta aquí ningún problema, Ejecuto mi aplicación  en mi computador y funciona perfectamente. Me muestra todas las imagenes, me conecto a la base de datos y me muestra las imagenes bien.

    Luego voy al servidor y la mayoría de las imágenes me las muestra pero hay algunas que no las muestra, no he podido saber porqué. Dejé habilitada la opción para lograr ver el error que me arrojaba en el servidor de producción con estas imágenes y lo único que me sale es:

     

    Server Error in '/DocumentWeb' Application.


    Parameter is not valid.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ArgumentException: Parameter is not valid.

    Source Error:

    Line 40:       {
    Line 41:         ms.Write(image, 0, image.Length);
    Line 42:         using (Bitmap jpg = (Bitmap)Bitmap.FromStream(ms,true,false))
    Line 43:         {
    Line 44:           

    Source File: c:\Inetpub\wwwroot\DocumentWeb\miImagen.aspx.cs    Line: 42

    Stack Trace:

    [ArgumentException: Parameter is not valid.]
      System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) +1062843
      miImagen.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\DocumentWeb\miImagen.aspx.cs:42
      System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
      System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
      System.Web.UI.Control.OnLoad(EventArgs e) +99
      System.Web.UI.Control.LoadRecursive() +50
      System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
    


    Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3614

     

    Bueno espero me puedan ayudar yo ya he leído media web y no pude con el error.
    Estos son los enlaces que considero más relevante spero no me dan ninguna solución.

    Gracias de antemano.


    La tecnologia te envuelve
    jueves, 7 de octubre de 2010 16:15

Respuestas

  • hola

    podrias suceder que no este encontrando la iamgen dentro de la tabla, auqneu imagino que en este caso fallaria porque acceder directo a la fila, aunque la query no retorne registro: 

    byte[] image = (byte[])ta.Rows[0][0];

     

    - imagino has validado que la imagen se recupere correctamente ?

    - no ahs probado usando un handler, como en el ejemplo del articulo? los handler para este tipo de operaciones quedan mejor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:27
    viernes, 8 de octubre de 2010 4:19

Todas las respuestas

  • hola

    revisa este link

    [ASP.NET] - Guardar Imagen base de datos

    alli veras que no es necesario convertir a imagen para realizarlo, puedes usar el Response.BinaryWrite()

    directo envias el byte[] al Response

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 7 de octubre de 2010 16:48
  • Cambie el código del load por este: Y me sale la imagen con una x roja pero respeta el tamaño.
      protected void Page_Load(object sender, EventArgs e)
      {
        if (Request.QueryString["IDImagen"] == null) return;
    
        //var ta = new EmpleadoTableAdapter();
        //byte[] image = (byte[])ta.ScalarEmpleadoFoto(Convert.ToInt32(Request.QueryString["IDImagen"]));
    
        string SQL = "SELECT imagen.imagen FROM imagen INNER JOIN imagenesdocumento ON imagen.codigoimagen = imagenesdocumento.codigoimagen WHERE imagenesdocumento.codigodocumento = " + Convert.ToInt32(Request.QueryString["IDImagen"]);
        DataTable ta = new DataTable();
        Datos dt = new Datos();
        
        Response.Clear();   
        Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", "Mi imagen"));
       
     
    
        ta = dt.getdatos(SQL).Tables[0];
        byte[] image = (byte[])ta.Rows[0][0];
    
        if (image != null)
        {
          Response.ContentType = "image/jpeg";
    
          Response.BinaryWrite(image);
          //Response.End;
          
          //using (MemoryStream ms = new MemoryStream(image))
          //{
          //  ms.Write(image, 0, image.Length);
          //  using (Bitmap jpg = (Bitmap)Bitmap.FromStream(ms,true,false))
          //  {
              
          //    jpg.Save(Response.OutputStream, ImageFormat.Jpeg);
          //    GC.Collect();
          //  }
          //}
        }
        else
        {
          Response.Write("NO");
        }
      }
    jueves, 7 de octubre de 2010 17:21
  • Leandro adecué mi código a cómo lo planteaste en tu página y tengo el siguietne inconveniente, si lo descargo me guarda bien, pero cuando lo voy a mostrar no me aparece la imagen únicamente los cuadros con la x roja.

     

    Que puede ser?

     

     protected void Page_Load(object sender, EventArgs e)
      {
        if (Request.QueryString["IDImagen"] == null) return;
    
        //var ta = new EmpleadoTableAdapter();
        //byte[] image = (byte[])ta.ScalarEmpleadoFoto(Convert.ToInt32(Request.QueryString["IDImagen"]));
    
        string SQL = "SELECT imagen.imagen FROM imagen INNER JOIN imagenesdocumento ON imagen.codigoimagen = imagenesdocumento.codigoimagen WHERE imagenesdocumento.codigodocumento = " + Convert.ToInt32(Request.QueryString["IDImagen"]);
        DataTable ta = new DataTable();
        Datos dt = new Datos();
        
        //Response.Clear();   
        //Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", "imagen1.jpg"));
       
     
    
        ta = dt.getdatos(SQL).Tables[0];
        byte[] image = (byte[])ta.Rows[0][0];
        
        if (image != null)
        {
          Response.ContentType = "image/jpg";
    
          Response.BinaryWrite(image);
    
          //Response.Write("<img src=" + Response.BinaryWrite(image) + "/>";
    
    
    
    
    
    
    
          //Response.End;
          
          //using (MemoryStream ms = new MemoryStream(image))
          //{
          //  ms.Write(image, 0, image.Length);
          //  using (Bitmap jpg = (Bitmap)Bitmap.FromStream(ms,true,false))
          //  {
              
          //    jpg.Save(Response.OutputStream, ImageFormat.Jpeg);
          //    GC.Collect();
          //  }
          //}
        }
        else
        {
          Response.Write("NO");
        }
      }
    

    La tecnologia te envuelve
    jueves, 7 de octubre de 2010 20:29
  • hola

    podrias suceder que no este encontrando la iamgen dentro de la tabla, auqneu imagino que en este caso fallaria porque acceder directo a la fila, aunque la query no retorne registro: 

    byte[] image = (byte[])ta.Rows[0][0];

     

    - imagino has validado que la imagen se recupere correctamente ?

    - no ahs probado usando un handler, como en el ejemplo del articulo? los handler para este tipo de operaciones quedan mejor

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:27
    viernes, 8 de octubre de 2010 4:19
  • hola ,

    Fue Posible tu Solucion ?

     


    Enmanuel Grullard@Developer ASP.NET
    martes, 12 de octubre de 2010 23:42
    Moderador