Carrierwave filename方法在将文件上传到s3时产生问题

时间:2017-10-20 11:13:21

标签: ruby ruby-on-rails-3 amazon-s3 carrierwave

我有filename,我想将图片上传到S3。 另外,我想使用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 方法更改文件名。 这是代码:

1_23434.png

第一次保存图像时,它会获得正确的文件名,例如{{1}}但是当我从控制台获取模型对象时,它会返回不同的图像名称。

这里有人可以帮助我吗?当我不使用雾时,它工作正常。

1 个答案:

答案 0 :(得分:0)

问题出在Index mean 15% low high A 288 43 245 331 B 50 8 43 58 C 338 51 287 389 D 50 8 43 58 E 16 2 14 18 F 66 10 56 76 G 118 18 100 136 H 17 3 14 20 I 91 14 77 105 J 26 4 22 30 K 117 18 99 135 L 165 25 140 190 M 18 3 15 21 方法中。在每次调用时,它返回不同的值。这是因为filename生成一个随机字符串(并且它没有被缓存)。引擎盖下还使用SecureRandom.urlsafe_base64(5)来构建与CarrierWave相关的路径字符串。这就是您从控制台运行filename时获取不同图像名称的原因。

您要查找的方法是object.image.filename(其中image_identifier前缀的名称是您的上传器的名称。)

您可以尝试以下内容:

image

其中object.public_send("#{object.image.mounted_as}_identifier") || generate_unique_name 是您当前的generate_unique_name实施。另一种方法是将哈希存储在模型本身中以供将来使用。

此外,关于creating random and unique filenames的官方维基页面可能对您有用。