ruby - 存储桶中的亚马逊 s3 和载波随机图像名称在数据库中不匹配

标签 ruby amazon-s3 carrierwave

我正在使用载波、rails 和 amazon s3。每次我保存图像时,图像都会显示在 s3 中,我可以在管理控制台中看到它的名称如下:

https://s3.amazonaws.com/bucket-name/ 上传/图片/10/888fdcfdd6f0eeea_1351389576.png

但是在模型中,名字是这样的:

https://bucket-name.s3.amazonaws.com/ 上传/图片/10/b3ca26c2baa3b857_1351389576.png

首先,为什么随机名称不同?我像这样在 uploader 中生成它:

def filename
  if original_filename
    "#{SecureRandom::hex(8)}_#{Time.now.to_i}#{File.extname(original_filename).downcase}"
  end
end

我知道它不会在每次调用时生成随机字符串,因为模型中错误的 url 是一致的并已保存。在保存图像名称并将其发送到 amazon s3 之后,必须在该过程的某个地方生成一个新图像以保存在模型中。奇怪。

此外,我可以在不使用正则表达式的情况下让 url 与 s3/bucket 而不是 bucket.s3 匹配吗?是否有载波或其他选项?

最佳答案

默认情况下,CarrierWave 不存储 URL。相反,它会在您每次需要时生成它。

因此,由于 Time.now.to_i,每次调用 filename 时都会返回不同的值。

改为使用 created_at 列,或添加一个新列来存储随机 ID 或完整文件名。

关于ruby - 存储桶中的亚马逊 s3 和载波随机图像名称在数据库中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105827/

相关文章:

python - RubyPython 无法在 OS X Lion 上导入 nltk

ruby - 将 4 个 8 位 unsigned int 合并为 1 个 32 位 unsigned int

google-app-engine - 有谁知道您是否可以在使用 Google App Engine 开发的站点上使用 Amazon 的 s3?

ios - 如何访问 quickblox 内容 swift2?

python - 应用引擎 : Out of Blobstore and into S3?

ruby-on-rails - CarrierWave Backgrounder 没有将版本图像上传到 AWS S3

ruby-on-rails - 如何在 ruby​​ 中构建这个 JSON 对象?

ruby 错误 : undefined method `[]’ for nil:NilClass

ruby-on-rails - 载波/雾 azure : azure is not a recognized provider (ArgumentError)

ruby-on-rails - Rails 5 - 并发的大型视频上传和后台 FFMPEG 编码使服务器非常慢