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
但是,已删除的上传不包括帖子被删除且其中包含图片的情况 。我认为需要先从帖子中编辑掉图片,然后才能删除。
我可以确认,如果包含该特定图片的(唯一)帖子已被删除,图片将不会被删除。我有一些图片仍然存在于数据库和 S3 中,它们来自 2023 年删除的一个帖子(该图片未在任何其他帖子中使用)。我以前也从未遇到过删除它们的情况。
所以,如果版主因为帖子包含违反规则的上传图片而删除该帖子,为了真正删除它,他们需要先将其从主题/帖子中编辑掉(并希望它不存在于任何其他帖子中)。否则,根据我的理解,它将永远存在于 S3 中。
一些非常棒的功能:
purge deleted uploads grace period days - 要么让此设置包含图片包含在已删除帖子中的情况,要么为这种情况添加另一个设置。
purge deleted uploads grace period days - 使用小时而不是天。版权移除请求通常需要非常迅速的响应,通常在 24-48 小时内。在这种情况下,1 天太慢了。任何 CDN 缓存也可能需要在删除后手动清除,这使得时间更加紧迫。
能够在仪表板中删除/清除图片。不过,如果 purge deleted uploads 包含已删除帖子中的图片,这将不那么必要,但仍存在图片用作头像或个人资料横幅等情况,并且对版主来说效率更高。Feature suggestion: Image removal/purge via web dashboard
使图片 URL 可搜索,这将涵盖版主能够查找包含特定图片的全部主题/帖子以删除这些帖子的场景。无需使用 SSH。
能够禁止上传某些哈希值将是一个不错的选择。
这样的话,像这样的流程就可以由没有 SSH 访问权限和技术技能的人来处理。特别是考虑到这些需要处理的速度有多快。需要 24/7 随时准备处理任何此类情况的技术人员,包括在所有节假日、周末、有人生病时等,成本是极高的。你无法预测何时会发生,因此必须随时准备在任何时候迅速处理。这是 UGC 不可避免的属性。
1 个赞
groove6j
(kilometrs)
2024 年5 月 9 日 21:24
3
为什么这个没有被广泛讨论?这是一个真正的大问题。
我写了一个 PHP 脚本,它使用从以下 SQL 查询 生成的 CSV 文件,该文件列出了所有上传及其引用:
(如果您有很多上传,请增加限制)
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 命令。
其中一个缺点是,所有保留在活动草稿中的图像也将被删除(但这可以通过降低删除 n 天前的草稿 来限制)。
第二个缺点是 - 不正确的数据库条目仍然存在,为此我应该向开发人员寻求修复。
如果删除了不正确的条目,问题应该会得到妥善解决。
<?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 文件应放置在脚本的同一目录中。
如果您有任何问题,请问我!
2 个赞