Les fichiers gérés seront-ils supprimés s'il n'existe aucune entrée correspondante dans file_usage?

9

J'utilise le module de services pour implémenter une API REST. Une ressource permet les POST avec des fichiers téléchargés. Pendant une fonction de prétraitement des services, j'enregistre le fichier dans le répertoire temporaire. Pendant une fonction de post-traitement des services, je déplace le fichier vers un répertoire privé, appelle file_usage_add et enregistre l'entité hôte. Lorsqu'une erreur de validation se produit entre l'enregistrement du fichier temporaire et le déplacement du fichier temporaire vers un emplacement permanent, je ne supprime pas explicitement le fichier temporaire. Je pensais que Drupal Cron s'en occuperait pour moi, car aucune entrée pour ce fichier n'existe dans file_usage. Cependant, il ne semble pas que Cron s'occupe de cela pour moi. Avez-vous une idée de la raison pour laquelle c'est?

Lors de l'examen de file_managed, je vois le fichier temporaire que j'aimerais supprimer. Lors de l'examen de file_usage, je ne vois aucun enregistrement correspondant.

Mise à jour - Une information supplémentaire: dans la plupart des cas, le fichier est réellement manquant. Je crois que cela est dû au redémarrage du système d'exploitation effaçant le répertoire / tmp. Quoi qu'il en soit, system_cron supprimerait-il toujours l'entrée file_managed d'un fichier si le fichier réel n'était plus trouvé?

Ce problème est survenu depuis que j'ai commencé à télécharger des fichiers à partir d'une application mobile native. Le nom de fichier est le même à chaque téléchargement. Dans certains cas, le nom de fichier temporaire n'existe pas dans le répertoire / tmp, mais un enregistrement dans file_managed existe toujours avec un URI de ce nom de fichier. Je reçois donc une erreur d'intégrité lorsque la table file_managed est enregistrée. J'ai l'intention de mettre à jour l'application pour créer un nom de fichier aléatoire. En attendant, je voudrais nettoyer la base de données et la logique de "colle" qui gère ces fichiers. Si system_cron fera tout pour moi, tant mieux. Mais d'après ce que je peux dire, system_cron ne supprime pas les anciens enregistrements complètement inutilisés (et non référencés) dans file_managed.

lkiss80
la source

Réponses:

8

Drupal supprime automatiquement les fichiers temporaires dans system_cron () .

Les fichiers permanents qui n'ont pas de fichier_usage ne sont pas supprimés, cependant.

Berdir
la source
C'est ce que je pensais. Cependant, les entrées dans file_managed traînent toujours, même si aucune entrée correspondante n'existe dans file_usage et qu'aucun fichier réel n'existe plus. Je dois manquer quelque chose ici ...
lkiss80
3
@ lkiss80 Le fichier ne sera supprimé que s'il a un statuszéro dans le file_managedtableau
Clive
4
Et en plus, doit être plus âgé que 6 heures.
Berdir
@Clive - Merci. Votre réponse m'a incité à revérifier le bit d'état. J'ai à l'origine référencé un livre qui inversait incorrectement le sens de ce bit. Merci encore!
lkiss80