旧的损坏的附件/上传在帖子的原始文本中显示为 [{文件名}|attachment](/uploads/default/original/2X/6/{sha1 哈希 + 扩展名})。这会被处理为 href="/uploads/default/original/2X/6/{sha1 哈希 + 扩展名}",从而导致文件附件失效,但图片不受影响。
之后正常工作的附件则显示为 [{文件名}|attachment](upload://{sha1 转 base62 + 扩展名}),并被处理为 href="/uploads/short-url/{sha1 转 base62 + 扩展名}"。
我写了一段 Ruby 代码,遍历已知问题时间段内的所有帖子,将所有旧的上传 URL 替换为新版格式。我利用了 Upload 模型的 base62_sha1 函数,将 SHA1 哈希转换为 Discourse 短链接所期望的文件名。
这使得附件恢复正常。随后,我再次运行了重新渲染(rebake)以确认修复效果,结果依然正常。看来问题仅存在于 Post.raw 中,与 Upload 无关。