Nettoyage des uploads et suppression des uploads depuis S3

:bookmark: Ce guide de référence décrit comment les téléchargements orphelins et supprimés sont automatiquement purgés d’un site Discourse. Ce guide s’applique aux sites Discourse auto-hébergés et hébergés.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur

Vous êtes-vous déjà demandé ce qu’il advient des fichiers et des images qui ont été téléchargés sur un site Discourse mais qui ne sont plus référencés, ou comment supprimer des téléchargements d’un site ? Vous êtes au bon endroit !

Vous pourriez avoir besoin de supprimer des fichiers et des images téléchargés sur Discourse qui ne sont plus référencés. Il n’existe pas de moyen intégré pour le faire depuis l’interface utilisateur, cependant, Discourse dispose d’une tâche Sidekiq automatique planifiée pour supprimer les téléchargements orphelins et supprimés appelée clean up uploads.

Téléchargements orphelins et supprimés

:information_source: Les téléchargements orphelins sont des fichiers qui ont été téléchargés sur un site Discourse mais qui ne sont plus référencés. Un téléchargement est considéré comme orphelin si et seulement si il n’est pas référencé :

  • Dans la dernière version d’un message
  • Dans un brouillon
  • Dans un message mis en file d’attente
  • Dans un paramètre de site de logo
  • Dans un emoji personnalisé
  • Dans un thème
  • Dans une image d’avatar/arrière-plan/carte d’utilisateur
  • Dans un logo/image d’arrière-plan de catégorie

:information_source: Les téléchargements sont considérés comme « supprimés » lorsque le sujet/message dans lequel ils se trouvent est supprimé.

Nettoyage des téléchargements

Pour supprimer complètement un téléchargement de Discourse, vous devrez faire l’une des choses suivantes :

  • Forcer le téléchargement à devenir orphelin en supprimant toute référence au téléchargement. Cela peut être fait en supprimant le lien de téléchargement du message dans lequel il se trouve, ou de tout autre endroit où le téléchargement peut être référencé.
  • Supprimer tous les sujets/messages contenant le téléchargement, ce qui amènera le téléchargement à être considéré comme « supprimé ». Notez que vous devez supprimer l’image du message avant de supprimer le message pour
4 « J'aime »

Est-ce exact ? Je pense que vous devez supprimer l’image du message avant de supprimer le message pour l’oriente.

De plus, ce dernier ne devrait-il pas être purge deleted uploads grace period days ?

1 « J'aime »

Activer le « nettoyage des téléversements » semble effrayant avec le message d’avertissement. Lors de la conversion d’un forum existant en Discourse, ce paramètre sera désactivé. Tous les scripts d’importation n’enregistreront pas correctement tous les téléversements dans les publications, donc si vous l’activez, vous pourriez perdre de nombreuses pièces jointes.

Avec la requête suivante, vous pouvez vérifier si les téléversements sont correctement référencés par les publications :

select p.post_id, u.id as upload_id
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
where not exists(select * from upload_references r where r.upload_id = u.id)

Cela ne devrait renvoyer aucune ligne si tout est correct. Si vous utilisez cette requête dans le plugin Data Explorer, elle liera également proprement les publications qui ont des pièces jointes non référencées.

Si la requête ci-dessus renvoie des résultats, vous pouvez corriger les références de téléversement manquantes avec la requête suivante :

insert into upload_references(upload_id, target_type, target_id, created_at, updated_at)
select u.id, 'Post', p.post_id, u.created_at, u.updated_at
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
on conflict do nothing;

Vous aurez besoin d’un accès direct à la base de données pour effectuer la modification corrective.