重命名上传的文件

我最近一直在上传学术报告的 PDF 文件(恰好是上传到 这个主题,关于季节性气候预测)。

我使用的文件命名规范如下:

  • 0000-第一作者-[等-] 标题 - 标题 - 标题.pdf

到目前为止一切顺利。直到我发现第一作者的名字有误。但当我尝试用更正后的文件名重新上传同一文件时,Discourse 检测到该文件在其他方面完全相同——我猜这里进行了某种哈希处理——于是它直接引用了原始文件,文件名保持不变且仍然错误。

我的变通方法是将以下设置更改为 1(默认为 48),删除标记中的所有引用,然后等待系统清除该文件:

  • 设置 > 文件 > 清理孤立上传的宽限期(小时)

我也尝试将这一参数设置为 0,但似乎不起作用。如果是这样,工具提示或许应修改为:“将值设为 0 以禁用宽限期”。或者更贴切地表述为:“将值设为 0 以实现近乎即时的生效”。

我无法确定此类维护任务实际运行的频率,我原以为是每小时一次?也许其实是每天一次?了解这一点也很有用。

非常感谢任何关于如何加快文件重命名过程的帮助!我确实有变通方案,但相当笨拙且缓慢。

每小时……

虽然我不熟悉 Ruby,但这看起来也意味着 0 代表 1。也许参数提示也应该写成:“值为 0 将被解释为 1。”或类似的内容。特别是在其他情况下,零通常具有“禁用”的特殊含义。谢谢 @neounix

如果你是自己部署的,我认为你想做的是在 Rails 控制台中更新上传记录。我不确定是否可以通过 API 实现这一点,但我还没查看过。

我们采用自建托管。有人提供过 Shell 账户访问权限,但我尚未跟进。感谢提示。

等一下。我不太确定你想做什么。是不是想更改人们在帖子中看到的文件名?如果是的话,或许你可以尝试类似下面的操作:

rake posts:remap["old-name.pdf","newname.pdf"]

具体可参考 在所有帖子中替换字符串。我认为对于你的需求来说,上传模型中的原始文件名其实并不重要。

不过,你可以通过以下方式修改它:

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

我尝试用该上传重新生成帖子,但没有任何变化。

编辑:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

如果你粘贴这段代码,就可以执行:

rename_upload('name.pdf','better-name.pdf')

这样就能确保下载时获得更合适的文件名。

在我以前做学术的那段日子里,我有自己独特的 PDF 命名方式,和任何人都不同;我敢肯定我妻子也有她自己的习惯。我猜,即使你把文件名改得“正确”,也没人会觉得满意。:wink:

这不是我想做的。leadauthor 字符串只是文件名的一部分,仅此而已。但当我修改了文件名(因为我对西班牙学者的家族命名惯例理解非常有限)并尝试上传重命名后的文件时,Discourse 检测到其清单中已存在一个完全相同的文件,于是切换回了原始的目标和文件名。我想这或许可以算作一个功能?:roll_eyes: 直到我从网站数据库中彻底清除了该文件后,我才得以上传修正后的文件名版本。我非常感激你的帮助和关注 @pfaffman

你在哪里看到“filename”?文件系统中的实际文件名是一个随机字符串。

在我的实例中测试后发现,你可以更改 [filename.pdf|attachment](upload://filehash.pdf) 中的文件名,虽然帖子中显示的是 filename.pdf,但下载时仍会使用原始文件名。我想这正是他想要的:重命名下载时使用的文件名。

这并非关键问题,但我也希望能够重命名上传的文件。

哦,好的。所以这三行 Rails 代码能实现你的需求。它不会改变帖子中显示的内容,但如果你点击该文件,它会以“better-name.pdf”的名称保存。

2 个赞

感谢所有回复的人。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.