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.