follmy

CarrierWaveでファイル名をランダムにする

2021-06-20

結論

CarrierWaveのwikiに書いてあった。secure_tokenメソッドをuploaderに追加して、filenameメソッドを下記のように変更したらいいとのこと。

class PhotoUploader < CarrierWave::Uploader::Base
  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end
end

SecureRandomについて

Rubyのモジュール。安全な方法でランダムな乱数を作ってくれる。uuidは、MACアドレスや時刻などの意味のある情報を含みませんとのこと。

バージョン4のUUID(Universally Unique IDentifier)を生成して返します。 version4のUUIDは全くランダムです(バージョンを除いて)。このUUIDはMA アドレスや時刻などのような意味のある情報を含みません
module SecureRandom

参考

module SecureRandom https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Create-random-and-unique-filenames-for-all-versioned-files


プロフィール

koyamaaa2です。

プライバシーポリシー