存储桶中的amazon s3和carrierwave随机图像名称在数据库中不匹配

AJc*_*dez 5 ruby amazon-s3 carrierwave

我正在使用载波,轨道和亚马逊s3.每次保存图像时,图像都显示在s3中,我可以在管理控制台中看到它,其名称如下:

https://s3.amazonaws.com/bucket-name/ uploads/images/10/888fdcfdd6f0eeea_1351389576.png

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

https://bucket-name.s3.amazonaws.com/ uploads/images/10/b3ca26c2baa3b857_1351389576.png

首先,为什么随机名称不同?我在上传器中生成它,如下所示:

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

我知道每次调用都不会产生随机字符串,因为模型中的错误网址是一致的并保存.在图像名称保存并发送到amazon s3之后,在此过程的某个地方必须生成一个新的以保存在模型中.奇怪.

另外,如果不使用正则表达式,我可以将网址与s3/bucket而不是bucket.s3匹配吗?在carrierwave中有选择吗?

AJc*_*dez 2

我通过保存文件名(如果它仍然是原始文件名)解决了这个问题。在上传器中,输入:

def filename
  if original_filename && original_filename == @filename
    @filename = "#{any_string}#{File.extname(original_filename).downcase}"
  else
    @filename
  end
end
Run Code Online (Sandbox Code Playgroud)

子域与路径的问题实际上并不是问题。它适用于子域。即https://s3.amazonaws.com/bucket-name/https://bucket-name.s3.amazonaws.com/两者都工作正常。