Ruby Tempfile - 修改文件名?

时间:2014-03-31 12:25:23

标签: ruby filenames temporary-files

我正在使用Tempfile存储生成的PDF,然后再上传到新目的地。

    pdf_file = WickedPdf.new.pdf_from_string(msgbody)
    tempfile = Tempfile.new(['Bob', '.pdf'], Rails.root.join('public','pdf-test'))
    tempfile.binmode
    tempfile.write pdf_file
    tempfile.close

虽然这样可以正常工作,但是生成的文件名,例如bob20140331-19260-1g6rzr1.pdf不是用户友好的。

我知道Tempfile会创建一个唯一的名称及其原因,但我最终需要更改名称,以使其更直观/更容易为我的用户消化。

有推荐的方法吗?即使它只是删除中间(19260)?感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

Tempfile用于创建具有唯一文件名的临时文件,该文件名将由垃圾收集器清除或者在ruby解释器退出时清除。

Tempfiles的行为类似于File对象,但我不确定您是否可以重命名文件,如果可以的话,如果上述自动清理仍然有效。此外,如果手动更改临时文件名,则可能会破坏唯一文件名的约束。

我建议创建一个普通文件并自己指定整个名称(succ方法可以帮助防止名称冲突)。

另一种解决方案可能是在上传过程中或之后设置文件名,你提到过。

答案 1 :(得分:0)

请注意确定是否有Tempfile文件,但是您是否可以在创建时间之后通过FileUtils模块重命名文件?这样你就可以实现创建的文件仍然具有有效且用户友好的名称。