我的一篇文章中的图片随机丢失了。我在 Rails 控制台中运行了 PostCustomField.where(name: Post::MISSING_UPLOADS),得到了以下结果:
[#<PostCustomField:0x00005636227c20a0
id: 7335,
post_id: 36,
name: "missing uploads",
value:
"[\"upload://ljcw6gjRoPMD0IB5Vcc6K23VXIA.png\",
\"upload://v6caNgjm6wDrHzN8MQdXYnlNJEs.png\",
\"upload://bn2lC9z0Xp4Fit00p6KepGMZZ2h.png\",
\"upload://omhuL50n5VfAxY8Reyf2rQFoEWb.jpeg\",
\"upload://yJCRzx9SogObwuj1En0QciZdntF.jpeg\",
\"upload://wOeXgaPEBBia8oS0xxbOr5NKNWo.gif\",
\"upload://fuXMNACp8WoEHEr3ayciiVJjmNl.png\",
\"upload://MTIX7g8Wu11qaJasGg5yGsFvJA.jpeg\",
\"upload://oKle1GsOlPD85zeHiKRdUGJCCEM.jpeg\",
\"upload://zY43AR6Xpga92HNzdEnxQRIVpYE.gif\",
\"upload://ufigIPfGEPbDInHP4co0I0YDT51.png\",
\"upload://h7A1BJjNwZZwuUTYWXCeASk7UAh.png\",
\"upload://gmFGijsek8NmtfqBwAguIgkzDFP.png\",
\"upload://qPFQBe9zvnTmOnqMhpofQF3oqCh.png\"]",
created_at: 2020 年 2 月 18 日 星期二 17:44:40 UTC +00:00,
updated_at: 2020 年 2 月 18 日 星期二 17:44:40 UTC +00:00>
由于这只是单篇文章中的 14 张图片,我可以通过手动方式修复,但我不知道如何在 S3 存储桶中找到原始图片。我尝试在这里搜索文件名,但没有得到任何结果:
maiki
(maiki)
2
我并没有直接使用 S3,但你的图片不在那里,难道不会导致它们缺失吗?
说真的:有没有日志可以检查这些文件名?也许是有什么奇怪的东西程序化地删除了它们?
问题在于 S3 网页控制台似乎只搜索当前文件夹。如果我深入某个特定文件夹并搜索其中的文件,它能找到。但如果我返回到父文件夹,它就找不到了。
michaeld
(Michael - Communiteq)
4
您需要先将 upload:// 格式的 URL 转换为实际的文件名。
谢谢,Michael。这很有用,但我无法弄清楚如何获取完整路径。在 Rails 控制台中,我可以这样做,但它没有给出实际的文件名:
Base62.decode("ljcw6gjRoPMD0IB5Vcc6K23VXIA").to_s(16)
=> "955952cf3952d2fad7c24528c08cfb79301a6260"
michaeld
(Michael - Communiteq)
6
这取决于很多因素,但既然文件据报缺失,它可能本来就放错了位置。现在你已经知道了文件名,只需在 S3 中浏览一下,看看是否能找到匹配的文件,这并不费多少功夫。
你也可以尝试在数据库中查找一个 Upload 记录,其 sha1 与该字符串匹配,并且该上传记录包含路径。但同样,如果一切正常,我们也就不会讨论这个问题了。