5

我正在使用载波、rails 和 amazon 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

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

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

4

2 回答 2

3

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

因此,每次filename调用它都会返回一个不同的值,因为Time.now.to_i.

请改用created_atcolumn,或添加一个新列来存储随机 id 或完整文件名。

于 2012-10-30T07:12:20.503 回答
2

如果它仍然是原始文件名,我通过保存文件名来解决它。在上传器中,输入:

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

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

于 2012-10-31T01:58:49.370 回答