如何删除已上传的文件?

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

  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
    
1 个赞