【问题标题】:Unable to save file to Amazon S3 when using carrierwave使用carrierwave时无法将文件保存到Amazon S3
【发布时间】:2012-11-10 06:59:18
【问题描述】:

请参阅下面的更新!

我在将图像文件上传到 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

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

宝石'雾'

gem '载波'

gem 'carrierwave_direct'

宝石'rmagick'

谢谢!

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

Excon::Errors::MovedPermanently

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

【问题讨论】:

    标签: upload amazon-s3 carrierwave rmagick fog


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

    我在这里遇到了同样的问题,我正在尝试使用 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
    

    【讨论】:

    • 这似乎为我们解决了第一个问题,但现在我们遇到了一个新错误:PermanentRedirect 您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来的请求发送到此端点。
    • 澄清一下,添加“return”对 Ruby 代码没有任何影响。方法中的最后一条命令会自动返回。
    猜你喜欢
    • 2016-06-29
    • 2017-10-08
    • 1970-01-01
    • 2018-04-04
    • 2014-12-16
    • 2013-03-02
    • 2018-08-20
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多