none
Imagenes no se muestran al correr la aplicacion arriba en el server

    Question

  • C# Visual studio 2010, asp.net, firefox

    Que tal en dias anteriores me pasaron este link de ejemplo para mostrar imagenes descargadas de base de datos sin necesidad de descargarlas a disco duro. ya implementamos el ejemplo y funciono perfectamente corriendolo desde mi servidor de desarrollo local, pero una vez que pasamos la version al servidor al sevidor y la ejecutamos desde un cliente la imagenes ya no se muestra.

    ¿ a que creen que se debe este problema, se requiere alguna configuracion adicional para que esto funcione?

    El link:

    http://ltuttini.blogspot.com.ar/2011/05/aspnet-gridview-edicion-empleados.html

    Saludos y gracias de antemano

    Friday, September 27, 2013 4:59 PM

All replies

  • hola

    validaste si dentro del handler no se produce un error al recuperar la imagen?

    podrias definri un try..catch y logear el error que se produzca en un archivo para asi validarlo y ver cual es el error

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, September 27, 2013 7:00 PM
  • Que tal Leandro, ya verificamos con el catch y la pagina no truena a pesar del THROW lo cual nos indica que no hay errores, te envio como tenémos codificado.

    Clase para tomar las imagenes.

    namespace Innova.Clases
    {
        public class HttpImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
        {
    
            public void ProcessRequest(HttpContext context)
            {
               
                // Arma el contexto que enviara la imagen en el response
                // se usa el nombre del empleado para el nombre del archivo que se envia
                //
                
    
                try
                {
                    context.Response.Clear();
                    context.Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", context.Request.Params["id"]));
                    context.Response.ContentType = "image/jpg";
    
                    DataRow row = SesionUsuario.TablaCatalogo.AsEnumerable().First(p => p.Field<string>("Imagen") == context.Request.Params["id"]);
                    byte[] imagen = null;
    
                    if (row == null)
                    {
                        imagen = File.ReadAllBytes(context.Server.MapPath(Parametro.ImagenNoDisponible));
                    }
                    else
                    { 
                        if(row["Imagen"].ToString()==Parametro.ImagenNoDisponible)
                            imagen = File.ReadAllBytes(context.Server.MapPath(Parametro.ImagenNoDisponible));
                        else
                            imagen = (byte[])row["ImagenBytes"];
                    }
    
                    context.Response.BinaryWrite(imagen);
                    context.ApplicationInstance.CompleteRequest(); 
                }
                catch (Exception ex)
                {
                    throw;
                }
                //context.Response.End();
                
            }
    
            public bool IsReusable
            {
                get { return false; }
            }
        }
    }

    Funcion donde obtiene los registros de base de datos y los agrega al GRID

    private DataTable ObtenerImagenesGrid(DataTable dtCatalogo)
            {
                try
                {
                    List<TablaImagenesEntidad> imagenes = new ArchivosBLL().ObtenerImagenes();
                    List<ImagenProcesoEntidad> relacion = new ArchivosBLL().ObtenerRelacionImagenPorProceso(catalogoE.Proceso);
                    TablaImagenesEntidad imagenesCatalogo = new TablaImagenesEntidad();
                    int index = 0;
    
                    foreach (var rel in relacion)
                    {
                        DataRow result = null;
                        try
                        {
                            result = dtCatalogo.AsEnumerable().First(p => p.Field<string>(catalogoE.ColumnaImagenID) == rel.Llave);
                        }
                        catch (Exception) { result = null; }
    
                        if (result != null)
                        {
                            imagenesCatalogo = imagenes.Find(p => p.ClaveImagen == rel.ClaveImagen);
    
                            if (imagenesCatalogo == null)
                            {
                                index = 0;
                            }
    
                           
    
                            result["Imagen"] = imagenesCatalogo.NombreImagen;
                            result["ImagenBytes"] = imagenesCatalogo.Imagen;
                           
                        }
                    }
                }
                catch (Exception ex)
                {
                    
                    throw;
                }
    
                
    
                foreach (DataRow item in dtCatalogo.Rows)
                {
                    if (string.IsNullOrEmpty(item["Imagen"].ToString()))
                        item["Imagen"] = Parametro.ImagenNoDisponible;
                }
    
                
    
                SesionUsuario.TablaCatalogo = dtCatalogo;
    
                return dtCatalogo;
            }

    Esta es la definicion de mi GRID

    <telerik:RadGrid ID="tableCatalogo" runat="server" 
                            AllowFilteringByColumn="false" AllowPaging="True" PageSize="30" DataKeyNames="Imagen"
                            AllowSorting="True" CellSpacing="0" Culture="es-ES" GridLines="None" Width="970px" 
                            onneeddatasource="tableCatalogo_NeedDataSource" Skin="Hay" 
                            onitemcommand="tableCatalogo_ItemCommand1">
                            <GroupingSettings CaseSensitive="False" />
                            <ClientSettings>
                                <Selecting AllowRowSelect="True" />
                                <ClientEvents OnRowDblClick="ObtenerDatos" OnRowContextMenu="RowContextMenu" />
                                <Scrolling AllowScroll="True" UseStaticHeaders="True" />
                            </ClientSettings>
    
                            <MasterTableView UseAllDataFields="True">
                                <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
    
                                <Columns>
                                    <telerik:GridTemplateColumn ItemStyle-Width="10px" HeaderStyle-Width="10px" UniqueName="CheckboxSeleccionar" Visible ="false">
                                        <ItemTemplate>
                                            <asp:CheckBox ID="CbxSeleccionar" runat="server" />
                                        </ItemTemplate>
    
                                        <HeaderStyle Width="10px"></HeaderStyle>
                                        <ItemStyle Width="10px"></ItemStyle>
                                    </telerik:GridTemplateColumn>
    
                                    <telerik:GridTemplateColumn DataField="linkButton" UniqueName="link" HeaderText="" ItemStyle-Width="36px" HeaderStyle-Width="36px" 
                                        Visible="false"
                                        ItemStyle-HorizontalAlign="Right" HeaderStyle-HorizontalAlign="Center" AllowFiltering="False">
                                        <ItemTemplate>
                                            <asp:LinkButton ID="linkImagen" runat="server" Text="Ver Imagenes" CommandName="linkCommand"/>
                                        </ItemTemplate>
                                        <HeaderStyle HorizontalAlign="Center" Width="100px"></HeaderStyle>
                                        <ItemStyle HorizontalAlign="Center" Width="100px"></ItemStyle>
                                    </telerik:GridTemplateColumn>  
    
                                    <telerik:GridTemplateColumn DataField="imagenWarning" UniqueName="Warning" HeaderText="" ItemStyle-Width="36px" HeaderStyle-Width="36px" 
                                        Visible="false"
                                        ItemStyle-HorizontalAlign="Right" HeaderStyle-HorizontalAlign="Center" AllowFiltering="False">
                                        <ItemTemplate>
                                         <img src="<%# Eval("Imagen","imagen.ashx?id={0}")%>" alt="" id="imagenDin" style="vertical-align: middle; margin-right: 7px; height:70px; width:70px;" />
                                        </ItemTemplate>
                                        <HeaderStyle HorizontalAlign="Center" Width="100px"></HeaderStyle>
                                        <ItemStyle HorizontalAlign="Right" Width="100px"></ItemStyle>
                                    </telerik:GridTemplateColumn>
                                </Columns>
    
                                <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
                                    <HeaderStyle Width="20px"></HeaderStyle>
                                </RowIndicatorColumn>
    
                                <ExpandCollapseColumn Visible="True" 
                                    FilterControlAltText="Filter ExpandColumn column" Created="True">
                                    <HeaderStyle Width="20px"></HeaderStyle>
                                </ExpandCollapseColumn>
    
                                <EditFormSettings>
                                    <EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
                                </EditFormSettings>
    
    <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
                            </MasterTableView>
    
    <PagerStyle PageSizeControlType="RadComboBox"></PagerStyle>
    
                            <FilterMenu EnableImageSprites="False"></FilterMenu>
                        </telerik:RadGrid>
                       

    Gracias por tu apoyo

    Friday, September 27, 2013 11:02 PM