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.
status
Null in derfile_managed
Tabelle