Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/03/2006, 11:13
osini
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 20 años, 11 meses
Puntos: 1
Cache de imagenes en C#

Estoy desarrollando una Intranet que permite al usuario añadir una imagen a una ficha. Cuando el usuario modifica la imagen y vuelve a verla se sigue mostrando la imagen antigua, hasta que refresca el navegador. En Firefox se ve perfectamente pero en IE se da este fallo.

Para solucionarlo he probado varias posibilidades, incluso algunas que son de ASP.

1. Posibilidad

Código:
Response.Expires = 0;
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.CacheControl = "no-cache";
Response.AddHeader("pragma", "no-cache");
Response.AddHeader("cache-control", "no-cache");
Incluso he probado varios parámetros en cache-control.

Código:
Response.AddHeader("cache-control", "private");
Response.AddHeader("cache-control", "no-cache, must-revalidate");
Sin resultado.

2. Usando ya opciones especificas de .NET y C#

En la cabecera declaro:
Código:
<%@ OutputCache Location="None" VaryByParam="None"%>
Y en el código:

Código:
Response.Cache.SetExpires(DateTime.Now.AddDays(-1d));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetValidUntilExpires(false);
Sin resultado.

3. Directamente he escrito en el codigo XHTML:

Código HTML:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" /> 
Sin resultado.

El usuario seguía viendo la misma imagen hasta que refrescaba la página en el navegador.

Es importante destacar que esta imagen se graba en como archivo en el servidor, si se grabase en la base de datos el problema no se da.

Finalmente la solución que hemos usado es añadir a la ruta de la imagen un parámetro con la fecha y la hora del sistema.

//servidor/web/img/el13.jpg?d=20060329190525

De esta forma la imagen se refresca siempre.

Se que es posible decirle al usuario que modifique las preferencias en su navegador (Herramientas -> Opciones de Internet -> Archivo temporales de Internet -> Configuración - Cada vez que se visita la pagina), pero no sabemos cuanto usuario van a usar la página y no queremos depender de cual va a ser el estado del navegador.

¿Alguien conoce alguna otra posibilidad?