Ruby Carrierwave文件名方法在将文件上载到s3时创建问题
我有一个Ruby Carrierwave文件名方法在将文件上载到s3时创建问题,ruby,ruby-on-rails-3,amazon-s3,carrierwave,Ruby,Ruby On Rails 3,Amazon S3,Carrierwave,我有一个ImageUploader,我想把一个图像上传到S3。 另外,我想使用filename方法更改文件名。 代码如下: class ImageUploader < CarrierWave::Uploader::Base storage :fog def store_dir "images" end def filename "#{model.id}_#{SecureRandom.urlsafe_base64(5)}.#{file.extension}
ImageUploader
,我想把一个图像上传到S3。
另外,我想使用filename
方法更改文件名。
代码如下:
class ImageUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"images"
end
def filename
"#{model.id}_#{SecureRandom.urlsafe_base64(5)}.#{file.extension}" if original_filename
end
end
class ImageUploader
第一次保存图像时,它会获得正确的文件名,例如1_23434.png
,但当我从控制台获取模型对象时,它会返回不同的图像名
这里有人能帮我吗?当我不使用fog时,它可以正常工作。问题在于
文件名方法。每次调用时,它都返回不同的值。这是因为SecureRandom.urlsafe\u base64(5)
生成一个随机字符串(并且它不会被缓存)<代码>文件名
也用于在引擎盖下通过CarrierWave构建路径相关字符串。这就是为什么从控制台运行object.image.filename
时会得到不同的图像名称
您正在寻找的方法是image\u identifier
(其中image
前缀位于装载上载程序的名称下)
您可以尝试以下方法:
object.public_send("#{object.image.mounted_as}_identifier") || generate_unique_name
其中,generate\u unique\u name
是您当前的filename
实现。另一种方法是将散列存储在模型本身中以备将来使用
另外,关于的官方wiki页面可能对您有用。问题在于
文件名方法。每次调用时,它都返回不同的值。这是因为SecureRandom.urlsafe\u base64(5)
生成一个随机字符串(并且它不会被缓存)<代码>文件名
也用于在引擎盖下通过CarrierWave构建路径相关字符串。这就是为什么从控制台运行object.image.filename
时会得到不同的图像名称
您正在寻找的方法是image\u identifier
(其中image
前缀位于装载上载程序的名称下)
您可以尝试以下方法:
object.public_send("#{object.image.mounted_as}_identifier") || generate_unique_name
其中,generate\u unique\u name
是您当前的filename
实现。另一种方法是将散列存储在模型本身中以备将来使用
另外,关于的官方wiki页面可能对您有用。为什么使用
如果原始文件名
条件位于文件名
方法?文件名返回什么?为什么使用如果原始文件名
条件位于文件名
方法?文件名返回什么?