0

请参阅下面的更新!

将图像文件上传到 Amazon S3 然后尝试保存文件后,我遇到了问题。

我使用 direct_fog_url(with_path: true) 来获取上传图片的 url。然后我收到以下错误:

ActiveRecord::RecordInvalid 验证失败:图像无法下载文件

我看到了这两种可能的解决方案:

https://github.com/jnicklas/carrierwave/issues/700

http://www.github.com/jnicklas/carrierwave/issues/888

但两者似乎都不起作用。

我使用较旧的已删除命令:覆盖方法 process_uri(在此处输入链接描述):

def process_uri(uri) 
 URI.parse(URI.escape(URI.unescape(uri)).gsub("[", "%5B").gsub("]", "%5D").gsub("+", "%2B"))
end

在我的应用程序中,我使用以下宝石:

宝石“雾”

宝石“载波”

宝石'carrierwave_direct'

宝石'rmagick'

谢谢!

更新:在下面实现@Alex的答案后,我们解决了这个问题,但是现在当我们上传时,我们得到以下错误:

Excon::Errors::MovedPermanently

PermanentRedirect 您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来的请求发送到此端点。

4

2 回答 2

1

你找到解决这个问题的方法了吗?

我在这里面临同样的问题,我正在尝试使用carrierwave(不在S3上)获取远程URL,并且我收到了臭名昭著的“无法下载文件”错误:

    Validation failed: Image could not download file
    [...]/gems/activerecord-3.2.9/lib/active_record/validations.rb:56:in `save!'

你能张贴你的网址看看有什么特殊字符吗?

编辑:我找到了解决方案。我的情况要求我根本没有改变或逃避 uri。我发现通过在 'def process_uri(uri)' 方法中添加 'return' 可以正常工作。以防万一这对其他人有用,这是我在上传器类中的重写方法:

    def process_uri(uri)
      return URI.parse(uri)
    end
于 2012-11-28T14:28:31.743 回答
1

对于您的Excon::Errors::MovedPermanently问题,请确保您在 carrierwave.rb 文件中配置了正确的数据中心区域。例如,如果您在 us-west 上托管,则需要将您的区域设置为 us-west。

于 2012-11-30T22:15:28.983 回答