Werden verwaltete Dateien gelöscht, wenn in file_usage kein entsprechender Eintrag vorhanden ist?

9

Ich verwende das Servicemodul, um eine REST-API zu implementieren. Eine Ressource ermöglicht POSTs mit hochgeladenen Dateien. Während einer Service-Vorverarbeitungsfunktion speichere ich die Datei im temporären Verzeichnis. Während einer Service-Nachbearbeitungsfunktion verschiebe ich die Datei in ein privates Verzeichnis, rufe file_usage_add auf und speichere die Host-Entität. Wenn zwischen dem Speichern der temporären Datei und dem Verschieben der temporären Datei an einen dauerhaften Speicherort ein Validierungsfehler auftritt, lösche ich die temporäre Datei nicht explizit. Ich dachte, Drupal Cron würde sich für mich darum kümmern, da in file_usage kein Eintrag für diese Datei vorhanden ist. Es scheint jedoch nicht, dass Cron sich für mich darum kümmert. Irgendwelche Gedanken darüber, warum das so ist?

Beim Überprüfen von file_managed wird die temporäre Datei angezeigt, die ich löschen möchte. Beim Überprüfen von file_usage wird kein entsprechender Datensatz angezeigt.

Update - Eine zusätzliche Information: In den meisten Fällen fehlt die Datei tatsächlich. Ich glaube, das liegt am Neustart des Betriebssystems, bei dem das Verzeichnis / tmp gelöscht wird. Würde system_cron den Eintrag file_managed für eine Datei trotzdem entfernen, wenn die tatsächliche Datei nicht mehr gefunden würde?

Dieses Problem trat auf, seit ich anfing, Dateien von einer nativen mobilen App hochzuladen. Der Dateiname ist bei jedem Upload gleich. In einigen Fällen ist der temporäre Dateiname nicht im Verzeichnis / tmp vorhanden, aber ein Datensatz in file_managed mit einem URI dieses Dateinamens ist noch vorhanden. Daher wird beim Speichern der Tabelle file_managed ein Integritätsfehler angezeigt. Ich plane, die App zu aktualisieren, um einen zufälligen Dateinamen zu erstellen. In der Zwischenzeit möchte ich die Datenbank und die umgebende "Kleber" -Logik bereinigen, die diese Dateien verwaltet. Wenn system_cron alles für mich erledigt, dann großartig. Nach allem, was ich sagen kann, entfernt system_cron keine alten, vollständig nicht verwendeten (und nicht referenzierten) Datensätze in file_managed.

lkiss80
quelle

Antworten:

8

Drupal löscht automatisch temporäre Dateien in system_cron () .

Permament-Dateien ohne file_usage werden jedoch nicht gelöscht.

Berdir
quelle
Das ist was ich dachte. Einträge in file_managed hängen jedoch immer noch herum, obwohl in file_usage keine entsprechenden Einträge vorhanden sind und keine tatsächliche Datei mehr vorhanden ist. Ich muss hier etwas vermissen ...
lkiss80
3
@ lkiss80 Die Datei wird nicht gelöscht, es sei denn, sie hat eine statusNull in der file_managedTabelle
Clive
4
Und muss zusätzlich älter als 6 Stunden sein.
Berdir
@Clive - Danke. Ihre Antwort veranlasste mich, das Statusbit noch einmal zu überprüfen. Ich habe ursprünglich auf ein Buch verwiesen, das die Bedeutung dieses Bits falsch umgedreht hat. Danke noch einmal!
lkiss80