¿Se eliminarán los archivos administrados si no existe una entrada correspondiente en file_usage?


9

Estoy usando el módulo de servicios para implementar una API REST. Un recurso permite POST con archivos cargados. Durante una función de preproceso de servicios, guardo el archivo en el directorio temporal. Durante una función de postproceso de servicios, muevo el archivo a un directorio privado, llamo a file_usage_add y guardo la entidad anfitriona. Cuando se produce un error de validación entre guardar el archivo temporal y mover el archivo temporal a una ubicación permanente, no estoy eliminando explícitamente el archivo temporal. Pensé que drupal cron se encargaría de esto por mí, ya que no existe ninguna entrada para este archivo en file_usage. Sin embargo, no parece que cron se esté encargando de esto por mí. ¿Alguna idea de por qué es esto?

Al revisar file_managed, veo el archivo temporal que me gustaría eliminar. Al revisar file_usage, no veo ningún registro correspondiente.

Actualización: una pieza adicional de información: en la mayoría de los casos, el archivo realmente falta. Creo que esto se debe a que el reinicio del sistema operativo borra el directorio / tmp. De todos modos, ¿system_cron aún eliminaría la entrada file_managed para un archivo si el archivo real ya no se encontrara?

Este problema surgió desde que comencé a cargar archivos desde una aplicación móvil nativa. El nombre del archivo es el mismo en cada carga. Hay algunos casos en los que el nombre de archivo temporal no existe en el directorio / tmp, pero todavía existe un registro en file_managed con un URI de ese nombre de archivo. Entonces obtengo un error de integridad cuando se guarda la tabla file_managed. Planeo actualizar la aplicación para crear un nombre de archivo aleatorio. Mientras tanto, me gustaría limpiar la base de datos y la lógica de "pegamento" que maneja estos archivos. Si system_cron lo hará todo por mí, entonces genial. Pero por lo que puedo decir, system_cron no está eliminando registros antiguos, completamente no utilizados (y sin referencia) en file_managed.

Respuestas:


8

Drupal elimina automáticamente los archivos temporales en system_cron () .

Sin embargo, los archivos permanentes que no tienen file_usage no se eliminan.


Es lo que pensaba. Sin embargo, las entradas en file_managed siguen dando vueltas, aunque no existan entradas correspondientes en file_usage y ya no exista ningún archivo real. Debo estar perdiendo algo aquí ...
lkiss80

3
@ lkiss80 El archivo no se eliminará a menos que tenga un statuscero en la file_managedtabla
Clive

44
Y además, debe ser mayor de 6 horas.
Berdir

@Clive - Gracias. Su respuesta me llevó a verificar dos veces el bit de estado. Originalmente hice referencia a un libro que volcó incorrectamente el significado de este bit. ¡Gracias de nuevo!
lkiss80
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.