使用carrierwave时无法将文件保存到Amazon S3

时间:2012-11-21 22:37:39

标签: upload amazon-s3 carrierwave rmagick fog

见下面的更新!

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

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

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

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

宝石'迷雾'

gem'carrierwave'

gem'carrierwave_direct'

gem'rmagick'

谢谢!

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

Excon :: Errors :: MovedPermanently

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

2 个答案:

答案 0 :(得分:1)

您是否找到了解决此问题的方法?

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

    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

答案 1 :(得分:1)

对于 Excon :: Errors :: MovedPermanently 问题,请确保您在carrierwave.rb文件中配置了正确的数据中心区域。例如,如果您在美国西部托管,则您的地区需要设置为我们西部。