从Ruby on Rails 3.2.6中的Paperclip生成的文件中删除问号
我正在使用Paperclip-FFMEG将video文件上传到我的开发环境(当我的项目投入生产时,最终会上传到本地服务器)。
上传video时,默认情况下,文件名如下:
/system/modelnames/paperclipnames/.../mynewfile.mp4?xxxxxxxxxx
我相信问号后面的10位数字是一个时间戳。
但是,我将用来播放video的播放器不希望在文件附件后有任何内容 – 因此我想在将URL传递给播放器之前删除问号和后面的时间戳。
我试着使用以下Ruby(我认为)strip函数:
temp_variable = model.paperclipattribute.url(:blah).strip('?')[0]
但是,Rails会抛出一个错误:
wrong number of arguments(1 for 0)
我认为我做错了吗? 还有其他方法吗? 我不想完全关闭时间戳,因为在这种情况下我只需要这样做。
谢谢!
如果要在给定附件的任何位置执行此操作而无需传递额外参数,则可以在模型中调用has_attached_file
方法时设置use_timestamp
选项。 因此,建立在Paperclip自述文件中给出的示例:
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png", :use_timestamp => false
希望这可以作为我自己的问题的答案(因为它可能对其他偶然发现这个post的人有用),但我已经发现处理这个问题的另一种(更合适的)方法是在视图中显示内容时,将false
参数添加到URL(),如下所示:
model.paperclipattribute.url(:whateverstyle, false)
时间戳将自动删除。 我认为这样更好,因为我建议的split
方法可能会删除您不打算删除的内容 – 例如,如果您的文件被称为“Is_this_a_question _?_ Yes_it_is.mp4?xxxxxx”,那么第一个问号之后的所有内容可能会被删除(即文件将被读作“这是一个问题_”,从而破坏文件名。
我没有测试过这个,所以我可能错了。
在全局默认它们关闭,只需将它放在config / initializers / paperclip.rb文件中。
Paperclip::Attachment.default_options[:use_timestamp] = false
我相信你想使用split
。 strip不接受任何参数,它只删除前导和尾随空格