Discourse already automatically removes orphan unreferenced uploads. Why not expand this functionality and erase uploads from deleted posts? Only staff members are able to see deleted posts and that is very useful. But is it really necessary to keep all the files indefinitely? As administrator I really don`t care about 2 years old deleted pictures. Some of which may even be right out against site guidelines.
It would be nice if Discourse would automatically delete these kind old files and place some kind of text block in the place of deleted file. So that it would be evident that file deletion has taken place.
For example all year old uploads which are referenced only in deleted posts would be automatically deleted.
「いいね!」 8
私もこれが非常に欲しいです。
この機能は、ある程度実装されているようです。
Hello Everyone,
I recently received a copyright strike to one PDF file but I am unable to remove it, so please assist me in this process as it is critical to the survival of my server.
Regards,
Sunder.
使用している設定:
clean orphan uploads grace period hours: 1
purge deleted uploads grace period days: 1
ただし、削除されたアップロードには画像を含む投稿が削除されたケースは含まれません 。画像/アップロードは、削除前に投稿から編集して削除する必要があると思われます。
特定の画像が(唯一)含まれていた投稿が削除された場合でも、画像は削除されないことを確認できます。2023年に削除された投稿から、データベースとS3にまだ存在する画像があります(画像は他の投稿では使用されていません)。以前のケースでも削除されたことはありません。
したがって、モデレーターがルール違反のアップロード画像を含む投稿を削除した場合、それを完全に削除するには、まずトピック/投稿から編集して削除する必要があります(他の投稿にも存在しないことを願って)。そうでなければ、私の理解では、S3には無期限に存在し続けます。
非常に役立つ機能:
purge deleted uploads grace period days - この設定に、削除された投稿に含まれる画像のケースを含めるか、そのケースのためにもう1つの設定を追加してください。
purge deleted uploads grace period days - 日ではなく時間を使用してください。著作権侵害の削除依頼は、通常、24〜48時間以内に迅速な対応が必要です。このケースでは1日は遅すぎます。削除後、CDNキャッシュも手動でパージする必要がある場合があり、タイムラインはさらにタイトになります。
ダッシュボードから画像を削除/パージできること。ただし、削除されたアップロードのパージに削除された投稿内の画像が含まれる場合、これはそれほど必要なくなりますが、アバターやプロフィールバナーなどで画像が使用されているケースもあり、モデレーターにとってはより効率的です。Feature suggestion: Image removal/purge via web dashboard
画像URLを検索可能にすること。これにより、モデレーターが特定の画像を含むすべてのトピック/投稿を見つけて、SSHを使用せずにそれらの投稿も削除できるようになります。
特定のハッシュのアップロードを禁止できる機能があれば便利です。
これにより、SSHアクセスや技術スキルを持たない担当者でも、このようなプロセスを処理できるようになります。特に、これらの処理を迅速に行う必要があるためです。技術スタッフを24時間年中無休で待機させて、発生する可能性のあるあらゆるケースに対応できるようにすることは、非常に高価です。いつ発生するか予測できないため、いつでも迅速に対応できるように準備しておく必要があります。これはUGCの避けられない属性です。
「いいね!」 1
groove6j
(kilometrs)
2024 年 5 月 9 日午後 9:24
3
なぜこれがもっと広く議論されないのか不思議です。これは本当に大きな問題です。
以下のSQLクエリ から生成されたCSVファイルを使用するPHPスクリプトを作成しました。これは、すべてのアップロードとその参照をリストします。
(アップロードが多い場合は、制限を増やしてください)
SELECT
uploads.original_filename,
ROUND(uploads.filesize / 1000000.0, 2) AS size_in_mb,
uploads.extension,
uploads.created_at,
uploads.url,
upload_references.upload_id,
upload_references.target_id,
upload_references.target_type,
upload_references.created_at,
upload_references.updated_at
FROM upload_references
JOIN uploads ON uploads.id = upload_references.upload_id
ORDER BY upload_references.target_type
LIMIT 90000
このスクリプトは、下書きとしてのみ残っている アップロードをフィルタリングします(これは、こちら で説明したように、データベースに誤って残っています)。スクリプトは、すべてのファイル名のスペース区切りの文字列を出力します。スクリプトを変更して、完全なパスを出力することもできます(basename()関数を削除します)。
次に、DiscourseのSSHサーバーにログインし、すべてのファイルに対してrmコマンドを実行します。
これの1つの欠点は、アクティブな下書きに残っているすべての画像も削除されることです(ただし、これはn日より古い下書きを削除する を低くすることで制限できます)。
2つ目の欠点は、誤ったデータベースエントリがまだ残っていることです。これについては、開発者に修正を依頼する必要があります。
誤ったエントリが削除されれば、問題は適切に修正されるはずです。
<?php
if (($open = fopen("test.csv", "r")) !== false) {
while (($data = fgetcsv($open, 100000, ",")) !== false) {
$array[] = $data;
}
fclose($open);
}
$final = array();
$i=0;
foreach ($array as $item){
if($item[7]=="Draft"){
foreach ($array as $item_inside){
if(($item_inside[4]==$item[4]) && ($item_inside[7]!="Draft")) $i++; //taisa i++, kad nav tikai drafts
}
if($i==0)array_push($final, $item[4]); //bija tikai drafti, var likt masiivaa
$i=0;
}
}
$final_unique= array_unique($final);
//print_r($final_unique);
foreach($final_unique as $single){
echo basename($single)." ";
}
?>
クエリを含むファイルtest.csvは、スクリプトと同じディレクトリに配置する必要があります。
何か問題があれば、私に聞いてください!
「いいね!」 3
私の推測では、おそらく多くの人がアップロードが自動的に削除されていないことに気づいていないからでしょう。
詳細を読みたい人のために、関連する別のスレッドをリンクします。
Hi,
Recently I ended up being the last remaining admin and maintainer of a basic Discourse Docker image instance that was originally installed on our server in 2021 (I think) and mostly updated by someone else. For some time now, possibly right from the start we’ve been having a problem with uploads from soft-deleted posts not getting orphaned and purged and I’ve been trying to troubleshoot this issue again for a few days as the obsolete files keep piling up and wasting storage space. We are no…
「いいね!」 2
groove6j
(kilometrs)
2025 年 11 月 30 日午後 12:07
5
この件は長い間経ったので、すでに修正されていることを望んでいました。サーバー上に孤児(残骸データ)がまだ残っているかどうか再確認する必要があるかもしれません。いずれにせよ、そのスクリプトは非常に役立ちます。
「いいね!」 3
gabriel
(Gabriel Grubba)
2025 年 12 月 1 日午後 6:49
6
こんにちは!これは先週あたりに修正された と思います…
削除された投稿のアップロードマークダウンを削除するための自動化が追加されました。例えば:
こんにちは、これは[Discourse](https://www.discourse.org)へのリンクと画像がある通常の投稿です:  そしてファイル: [small.pdf|attachment](upload://3bWzVVoRhUXxi7tiPenInoebHyX.pdf) (130 Bytes)
この投稿で自動化が実行されると、改訂版は次のようになります:
こんにちは、これは[Discourse](https://www.discourse.org)へのリンクと画像がある通常の投稿です:
そしてファイル:
そして、これらのアップロードは orphans (孤児) になるため、cleanup uploads job によって検出されます。
また、セルフホストされている場合は、s3_stale_while_revalidate および s3_max_age 設定を使用してキャッシュ制御ディレクティブを更新できます。
「いいね!」 1