Zauważyłem coś dziwnego na mojej stronie: po dołączeniu pliku do węzła (za pomocą zwykłego pola pliku) plik ten nigdy nie jest usuwany z serwera . Usuwam go z węzła, zapisuję tę zmianę, ale widzę, że plik nadal znajduje się na serwerze.
To sprawia, że zamiana plików jest bardzo trudna, ponieważ gdy użytkownik próbuje dołączyć zamiennik, nazwa pliku ma przyrostek „_0” lub „_1” (ponieważ oryginalny plik jest nadal na serwerze, co powoduje, że nazwa jest duplikatem) . Oznacza to, że musielibyśmy znaleźć wszystkie linki do pliku i edytować każdy z nich, aby pasował do nowej nazwy pliku / adresu URL. To totalny bałagan.
Patrzę online i wydaje się, że nikt nie ma tego problemu - pliki powinny zostać usunięte z serwera po ich usunięciu z węzła.
Jakieś pomysły, dlaczego tak się dzieje w moim przypadku? Nie jestem pewien, od czego zacząć. Z pewnością strona konfiguracji „Systemu plików” nie ma nic takiego jako opcja, która mogła zostać sprawdzona. Wydaje się, że same opcje pól nie mają nic takiego, co mógłbym przypadkowo ustawić. Jakieś inne pomysły?
Odpowiedzi:
Mam to! To kwestia rewizji. Myślę, że to ma sens. Jeśli masz włączone wersje dla tego typu zawartości, wszystkie stare pliki są przechowywane na serwerze (powiązane ze starymi wersjami), więc wymiana pliku jest zdecydowanie trudniejsza. Jeśli spróbujesz go usunąć i dodać ponownie do węzła, nazwa / link zostanie zaktualizowana, jak wspomniałem w moim pytaniu. Ponieważ plik o tej nazwie jest przechowywany na serwerze i występuje duplikacja nazwy, dodaje on sufiksy „_0”, „_1” itd. Do przyszłych przesłanych wersji nazwy tego pliku.
Rozumiem jednak, dlaczego tak się dzieje, ponieważ cały punkt weryfikacji jest w stanie przywrócić do dowolnej wcześniejszej wersji strony.
Obejściem tego problemu jest to, że można faktycznie usunąć starą wersję z karty „Rewizja” lub „Moderuj” (jeśli używasz Moderacji środowiska roboczego), która zawiera plik, który próbujesz zastąpić. Następnie prześlij go ponownie, a nazwa powinna się zgadzać bez konieczności cofania się i edytowania linków prowadzących do tego pliku.
Mam nadzieję, że to ma sens i że pomaga również komuś innemu!
źródło
Miałem ten sam przypadek użycia (chcąc zastąpić pliki przy zachowaniu nazwy pliku), a następujący kod w module niestandardowym spełnił ten cel. Ten kod opiera się na module Entity API , dlatego należy go dodać jako zależność w pliku .info modułu. Witamy mile widziane.
Pozwala to na natychmiastowe usunięcie plików po kliknięciu „Usuń”, a następnie zapisaniu węzła. Ostrzeżenie: oznacza to również, że po usunięciu pliku i zapisaniu węzła nie można odzyskać tego pliku, przywracając wcześniejszą wersję.
źródło
Zrobiłem moduł, który usuwa osierocone pliki, jak wspomniano w tym wątku:
https://www.drupal.org/project/fancy_file_delete
Może również wymusić usuwanie plików ręcznie, a także pliki niezarządzane.
źródło
Może to być problem z uprawnieniami na serwerze. Spróbuj tego samego w czystej instalacji - jeśli masz ten sam problem, to zależy od serwera, a nie od Drupala.
Czy jest coś w logach?
źródło
Nie miałem szczęścia w usuwaniu starych wersji lub zapisywaniu węzłów bez dołączonych plików i powrotu. To jedyne rzeczy, które zawsze działają:
Nienawidzę drugiej opcji, dlatego szukam tutaj innego rozwiązania.
(Mógłbym również przekraczać granice, ponieważ mam grupę klientów korzystających z D6.)
źródło
Wystąpił również ten problem z moderacją środowiska roboczego, a wstawianie pola pliku faktycznie pokazuje stare wersje przesyłanych plików, gdy pliki o tej samej nazwie są ponownie przesyłane w różnych wersjach dokumentu.
Aby wszystko działało sprawnie, dodaj vid węzła jako folder do ścieżki przesyłania plików. Zwykle robię coś takiego.
Ścieżka folderu = zasoby / [węzeł: nid] - [węzeł: tytuł] / [węzeł: vid]
Tak, są to brzydkie długie foldery z szaleństwem podfolderów, ale pliki można łatwo znaleźć za pomocą identyfikatora lub tytułu węzła, a następnie podfolder zapobiega kolizjom nazw, dzięki czemu można przechowywać wiele wersji tego samego pliku o tej samej nazwie. Następnie możesz usunąć stare wersje, jeśli chcesz wyczyścić miejsce.
źródło