Cómo borrar imágenes una vez cargadas?

Buenas. Tengo una aplicación que genera gráficas en base a los datos
del
usuario en sesión.
Para ver las gráficas, el usuario pincha en un enlace, se hace una
llamada
ajax al método que genera los gráficos, y devuelve las rutas de las
imágenes
generadas, cargándose el rhtml que las contiene.

Lo que me gustaría es que cuando se terminasen de cargar las imágenes,
se
llamase por ajax a otro método que eliminase el contenido de las
carpetas
temporales. Algo así como
window.onload = borrar_temporales;
function borrar = <%=remote_function :url => {:action =>
‘borrar_temporales’}%>

Pero al ser una llamada ajax, el onload no se ejecuta.

¿Alguna sugerencia?

On 7/11/07, Luis V. [email protected] wrote:

‘borrar_temporales’}%>

Pero al ser una llamada ajax, el onload no se ejecuta.

¿Alguna sugerencia?

La llamada al metodo ajax que genera la foto que es? Un link o que? Si
es asi fijate que podes usar :oncomplete, :after, etc. para hacer un
callback cuando termine y ejecutar otra accion.

Sí es un remote_link y ya había pensado en el :complete. El problema es
que
la acción se ejecutaría nada más ejecutarse el método, y puede darse la
posibilidad de que las imágenes se borren antes de descargarse del todo.
Por
eso me gustaría saber si se puede controlar no sólo que se haya
terminado la
llamada ajax, sino que se hayan cargado todos los elementos de la
página.

On Wed, Jul 11, 2007 at 04:20:41PM +0200, Luis V. wrote:

Sí es un remote_link y ya había pensado en el :complete. El problema es que
la acción se ejecutaría nada más ejecutarse el método, y puede darse la
posibilidad de que las imágenes se borren antes de descargarse del todo. Por
eso me gustaría saber si se puede controlar no sólo que se haya terminado la
llamada ajax, sino que se hayan cargado todos los elementos de la página.

¿Y por qué en lugar de hacer eso no eliminas esas imágenes
periódicamente? Puedes hacerlo incluso usando el script runner (o con
una tarea de Rake).

Saludos.

Ya había pensado en eso, pero es información confidencial y me gustaría
que
estuviesen en la carpeta pública del servidor el menor tiempo posible.
Ahora mismo, las imágenes se generan con una cadena aleatoria de 12
caracteres, pero estoy un poco paranoico por la seguridad.

He pensado también en poner en el link un onComplete y en la función a
la
que llamo, meterle un timeout para que se ejecute a los 10 segundos o
algo
así, que ya se habrán cargado las imágenes, pero no tengo muy claro como
usar el timeout. ¿me dais alguna sugerencia?

Hola Luis,

¿Has probado a servir las imágenes con send_file[1]? De esa forma puedes
restringir las imágenes que permites servir a cada usuario. Como avisan
en la API, restringe bien los archivos que envías y no uses nada tipo
send_file(params[:path]) o puedes tener un disgusto :wink:

[1] ActionController::Streaming

Saludos,
Raul M.

El Jul 11, 2007, a las 5:23 PM, Luis V.
escribió:

Ya había pensado en eso, pero es información confidencial y me
gustaría que estuviesen en la carpeta pública del servidor el menor
tiempo posible.
Ahora mismo, las imágenes se generan con una cadena aleatoria de 12
caracteres, pero estoy un poco paranoico por la seguridad.

En ese caso puede que lo mejor sea que las imagenes las sirva un
controlador, tendras el control total y estaras mas tranquilo:

def image
if user_is_allowed_to_see_it
send_file …
else
render :nothing => true
end
end

Si tienes un Apache (o lighty) con mongrel cluster puedes hacer que
esa llamada a send_file resulte en delegar en el frontend el servicio
del archivo de veras con el modulo mod_xsendfile y este plugin:

http://agilewebdevelopment.com/plugins/xsendfile

de manera que no penalizas a la aplicacion, solo pasas por ella para
control de acceso.

– fxn

El Jul 13, 2007, a las 8:17 AM, Luis V.
escribió:

Buenas. Ante todo, gracias por las respuestas. Al tema: Llevo un
par de días con lo de send file, y me surge una duda… ¿Hay alguna
forma de mandar varias imágenes al html que se genera?

Ahora sólo se me ocurre como mandar una. ¿Alguna sugerencia?

No, pero recuerda como van las peticiones web.

Primero el navegador pide la pagina. Cuando la tiene solo tiene
codigo fuente. Lo parsea y manda una request por cada recurso
adicional necesario, por cada CSS, cada JavaScript, cada imagen, etc.
Por tanto, el pedir una sola pagina web puede perfectamente resultar
en 20 requests reales. De manera que el navegador solo va a entender
que le envies una sola imagen por request, y cuando te la pida. Una
peticion para la imagen tal, un response con la imagen tal.

Por RJS puedes “colocar” varias imagenes simultaneamente en la
pagina. Pero solo aparentemente, lo hagas como lo hagas vas a
disparar una request por imagen, y vas a servir una imagen por request.

– fxn

Más o menos entiendo lo que me estás diciendo. Ahora sólo me faltaría
saber
como cojer una imagen enviada por send_file desde la vista .

Muchas gracias

Buenas. Ante todo, gracias por las respuestas. Al tema: Llevo un par de
días
con lo de send file, y me surge una duda… ¿Hay alguna forma de mandar
varias imágenes al html que se genera?

Ahora sólo se me ocurre como mandar una. ¿Alguna sugerencia?

Oki, muchas gracias. Probaré ahora.

También quiero hacer pública mi satisfación con el funcionamiento de
esta
lista.

El Jul 13, 2007, a las 10:26 AM, Luis V.
escribió:

Más o menos entiendo lo que me estás diciendo. Ahora sólo me
faltaría saber como cojer una imagen enviada por send_file desde la
vista .

Seria algo del estilo (sobre la marcha y wrappeado por ir por mail):

<%= image_tag(
url_for(
:controller => ‘reports’,
:action => ‘image’,
:graph => ‘foo’)) %>

Eso generara (depende de rutas y tal, pero para pillar la idea):

<img src="/reports/image?graph=foo" … />

y el navegador hara una peticion GET a

/reports/image?graph=foo

tan ricamente esperando una imagen de vuelta. El no sabe si eso lo
sirve codigo Ruby o viene del disco servido por Apache, el recibe un
response con un content-type y un body, de generar ese response asi
se encarga send_file().

– fxn