【问题标题】:Carrierwave unique filename not being set未设置 Carrierwave 唯一文件名
【发布时间】:2012-12-24 10:50:41
【问题描述】:

我查看了 github 上的carrierwave wiki,并使用method they describe 生成了唯一的文件名:

def filename
   @filename ||= "#{secure_token}.#{file.extension}" if original_filename.present?
end

private
def secure_token
    var = :"@#{mounted_as}_secure_token"
    random_token = Digest::SHA2.hexadigest("#{Time.now.utc}--#{model.id.to_s}").first(20)
    model.instance_variable_get(var) or model.instance_variable_set(var, random_token)
end

(虽然使用哈希)

我遇到的问题是文件名仍设置为原始文件名。就好像 filename 方法被忽略了。不太确定发生了什么。我重置了服务器和所有内容,仍然在上传的文件和缩略图版本上获得原始文件名。

【问题讨论】:

    标签: ruby-on-rails ruby carrierwave


    【解决方案1】:

    我不知道为什么文档在filename 方法中使用了||= 运算符,但是除非@filenamenil,否则不会设置唯一文件名,这似乎不是通常的情况。使用= 而不是||=(或根本不使用赋值)似乎可以解决问题。

    def filename
      @filename = "#{secure_token}.#{file.extension}" if original_filename.present?
      # The following line works too
      #"#{secure_token}.#{file.extension}" if original_filename.present?
    end
    

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 2020-06-22
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多