如何删除已上传的文件?

没错。

无法判断,因为你进行了“忍者编辑”(未创建新版本)修改了帖子。该帖子的第一个版本只包含 “edited.png”。

这让我认为你只是链接了图片,而没有上传它。

是的,因为你编辑帖子的速度太快了。我们这里有 300 秒的宽限期窗口,在此期间如果你进行编辑,不会创建帖子的新版本。

如果你查看原始内容,会发现这些图片只是指向 Dropbox 的链接。

这些图片并未被上传,仅仅是被链接了。

谢谢。

底层链接早已被删除——这是否意味着这些 .gif 文件应该停止显示?从右键菜单点击“查看图片”会跳转到 community.signalusers 地址,这是预期的行为吗?

测试中,我将在约 300 秒后编辑掉这部分内容,并随后删除该链接。

deleted.png


编辑 #2

链接已删除,但图片仍保留在编辑历史中。也许因为它没有 Upload 记录,所以未被自动清理机制移除。

它托管在 https://d11a6trkgmumsb.cloudfront.net/original/3X/1/0/101f03af29f12ea30e1226eb96a02c3ed2f6d2ef.png。不是 Dropbox。

我想,查看一下设置,当启用了 download_remote_images_to_local 时,图片被保存在本地是预期的行为。我认为这是相关的设置。

所以这个

在这种情况下并未生效,正如我在之前的帖子中演示的那样。如果我说错了请纠正我。

如果启用了站点设置“清理上传文件”,则上传文件将在“清理孤儿上传文件的宽限期(小时)”后自动删除。

感谢您的快速回复!

clean up uploads(清理上传内容)听起来像是一个通用设置,会捕获所有带有 upload 记录的图片,是这样吗?而不仅仅是由 download_remote_images_to_local(下载远程图片到本地)导致的图片。如果是这样,我应该能在网站上找到一些常规上传的图片示例,它们并未因自动清理而被删除。

您介意我问问这里的 clean orphan uploads grace period hours(清理孤立上传内容的宽限期小时数)设置为何值吗?这样我可以将其作为解决方案提供。或者它有一个默认值?

如果他们决定启用该设置,是否需要执行任何操作才能将其应用于过去的帖子?


编辑
为明确起见,这里的想法是:这并非一个问题,而是需要开启某个设置。我只是不想回头说“您需要启用这个!”,结果对方回答“已经启用了!”,那样我会显得很尴尬。

我也发现自己曾慌乱地寻找一个可以浏览上传文件的地方(MediaWiki 中很熟悉的功能),因为我知道文件经常被重复上传,有时我甚至找不到之前上传过但可能已丢失或删除的文件,以便直接链接到它,而不是再次重新上传……我想,文件浏览器的确有其存在的价值……:slight_smile:

我还必须以某种方式删除一个已上传的文件。我们没有启用清理任务,因为有些文件来自另一个论坛软件的导入,并且尚未在导入的帖子中正确引用。因此,我需要找到一种手动方法。以下方法有效,但并不理想……

  1. 确保相关上传不再是任何帖子当前版本的一部分。这样,Discourse 会将其视为孤立文件,并在您删除它时不会引起麻烦。

  2. 使用 Data Explorer 插件 或其他方法查询 Discourse 数据库,列出孤立的上传文件,找到相关的那个,并记下其 upload_id 和 filename。相关查询:

    SELECT 
      uploads.id, uploads.user_id, uploads.created_at, 
      uploads.url, uploads.filesize
    FROM uploads
      LEFT OUTER JOIN post_uploads ON uploads.id = post_uploads.upload_id
    WHERE post_uploads.post_id IS NULL
    ORDER BY created_at DESC
    LIMIT 100
    
  3. 在数据库中或使用 Discourse 的 Rails 控制台 通过其 upload ID 删除 uploads 表中相关的记录。这里我使用 Rails 控制台:

    Upload.where(id: 16384).first.delete
    
  4. 通过 SSH 删除文件系统中的关联文件,包括所有优化版本(如果有,适用于图像)。请注意,在文件扩展名前添加了通配符,以捕获此处带有后缀的优化版本。当然,

    cd /path/to/discourse/shared/public/
    find . -name 43adade7a4cc64426adb8232a56cb2c3b49fb7c9*.pdf -type f -delete
    

嗯!看起来此帖子中引用的图片并未被这些设置捕获:

为什么它没有被删除?

我还想知道为什么 Discourse 会“上传”像此处 Dropbox 链接这样的链接文件?链接特定文件的目的是通常保留对内容的控制权。

重命名 post_uploads 为 upload_references 后,第 2 步中列出的 SQL 查询不再有效。更新后的代码如下:

SELECT 
  uploads.id, uploads.user_id, uploads.created_at, 
  uploads.url, uploads.filesize
FROM uploads
  LEFT OUTER JOIN upload_references ON uploads.id = upload_references.upload_id
WHERE upload_references.target_id IS NULL
ORDER BY created_at DESC
LIMIT 100