Korzystam z modułu usług do implementacji interfejsu API REST. Jeden zasób zezwala na testy POST z przesłanymi plikami. Podczas funkcji wstępnego przetwarzania usług zapisuję plik do katalogu tymczasowego. Podczas funkcji post-processingu usług przenoszę plik do katalogu prywatnego, wywołuję file_usage_add i zapisuję jednostkę hosta. Gdy wystąpi błąd sprawdzania poprawności między zapisaniem pliku tymczasowego a przeniesieniem pliku tymczasowego do stałej lokalizacji, nie usuwam jawnie pliku tymczasowego. Myślałem, że drupal cron zajmie się tym za mnie, ponieważ nie istnieje wpis dla tego pliku w usłudze file_usage. Nie wydaje się jednak, żeby cron się tym zajął. Wszelkie przemyślenia, dlaczego tak jest?
Podczas przeglądania file_managed widzę plik tymczasowy, który chciałbym usunąć. Podczas przeglądania file_usage nie widzę żadnego odpowiedniego rekordu.
Aktualizacja - jedna dodatkowa informacja: w większości przypadków brakuje pliku. Myślę, że jest to spowodowane ponownym uruchomieniem systemu operacyjnego, czyszczącym katalog / tmp. Niezależnie od tego, czy system_cron nadal usuwa wpis zarządzany przez plik dla pliku, jeśli rzeczywisty plik nie został już znaleziony?
Ten problem pojawił się, odkąd zacząłem przesyłać pliki z natywnej aplikacji mobilnej. Nazwa pliku jest taka sama przy każdym przesyłaniu. W niektórych przypadkach nazwa pliku tymczasowego nie istnieje w katalogu / tmp, ale rekord w pliku zarządzanym przez plik nadal istnieje z identyfikatorem URI tej nazwy pliku. Pojawia się błąd integralności podczas zapisywania tabeli zarządzanej przez plik. Planuję zaktualizować aplikację, aby utworzyć losową nazwę pliku. W międzyczasie chciałbym oczyścić bazę danych i otaczającą ją logikę „kleju”, która zarządza tymi plikami. Jeśli system_cron zrobi to wszystko dla mnie, to świetnie. Ale z tego, co mogę powiedzieć, system_cron nie usuwa starych, całkowicie nieużywanych (i niereferencyjnych) rekordów w file_managed.
status
zero wfile_managed
tabeli