【问题标题】:Rails 4 + Paperclip: How to rename file name in the databaseRails 4 + Paperclip:如何重命名数据库中的文件名
【发布时间】:2013-09-05 16:53:24
【问题描述】:

我正在使用带有 Rails 4 的 Paperclip 将附加的视频文件添加到我的一个模型中。我可以像这样以新的id 命名保存的文件:

has_attached_file :file, :url=>"/tmp/video_uploads/:id.:extension", :path=>":rails_root/tmp/video_uploads/:id.:extension"   

这会使它们以正确的名称 + 原始扩展名保存到正确的位置。但是,当我查看数据库时,新记录的file_file_name 字段仍然是原始文件名(例如:scooby-dooby-doo.MOV)。我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby paperclip ruby-on-rails-4


    【解决方案1】:

    据我所知,它只是一个属性:

    object.file_file_name = 'something_else'
    object.save
    

    好像是保留原文件上传名。改变这个值并没有真正做任何事情。

    编辑:你说你想让找到相关文件变得容易,你知道file上的.url.path方法吗?

    object.file.path 
    object.file.url
    

    在 github 上查看 the attachment object

    看起来,重新分配file_file_name 的值似乎会“破坏”file.original_filename,因为它不再准确。如果您只想要实际存储文件的文件部分,则可以尝试以下方式:

    class MyModel < ActiveRecord::Base
    
      has_attached_file :file
    
      def actual_filename
        File.basename(file.url)
      end
    
    end
    

    【讨论】:

    • 是的。这只是一个属性,但我需要在保存文件时动态执行此操作,并且我不确定如何在保存时访问 ID 或任何视频属性。这就是我想要弄清楚的。
    • 阅读您的编辑。我试图让查找与记录对应的文件变得容易。我不能用原始文件名存储文件,所以我试图防止记录和文件名不匹配。
    • 谢谢尼克。我觉得我说得不够清楚。当我第一次保存新视频(文件)时,我必须重命名它。 (这已经在工作了)。保留原始文件名不是一个选项,因为它是用户生成的内容,并且即将上传到将通过该文件名存储它的第 3 方 API。出于隐私原因,我不想在播放视频时将用户的原始文件名暴露给客户端。这不是什么大问题,但这意味着我的数据库中的 ..._file_name 字段是无用的,我必须自己构建本地文件的路径。有意义吗?
    猜你喜欢
    • 2016-05-20
    • 2011-06-13
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多