6

当我的对象成功上传到 Amazon 的 S3 服务时,我正在尝试配置从回形针返回的端点。上传和一切工作正常,但返回的 URL 不正确,无法显示上传。

现在,正在返回的 url 是http://s3.amazonaws.com/path/to/my/items(如下图所示)。

而不是s3.amazonaws.com,我希望根特定于存储桶的位置(例如s3-us-west-1.amazonaws.com/path/to/my/items

在此处输入图像描述

我应该在哪里尝试配置不同的 url 路径(从 s3.amazonaws.com 到其他路径)?我尝试将具有上述路径的 url 添加到我的配置文件中,例如:

  #Paperclip Amazon S3
  config.paperclip_defaults = {
      :storage => :s3,
      :url => "https://s3-us-west-1.amazonaws.com/",
      :s3_credentials => {
          :bucket => ENV['S3_BUCKET_NAME'],
          :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
          :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']

      }

  }

这似乎没有任何效果。请告知我应该在哪里设置此选项!

提前致谢!

4

3 回答 3

11

如果您要使用 S3,我们发现您必须在实际模型中包含 S3 凭据(而不仅仅是配置文件)。这是我们所做的:

模型

#Image Upload 
Paperclip.options[:command_path] = 'C:\RailsInstaller\ImageMagick'
has_attached_file :image,
        :styles => { :medium => "x300", :thumb => "x100" },
        :default_url => "****",
        :storage => :s3,
        :bucket => '****',
        :s3_credentials => S3_CREDENTIALS,
            :url => "/:image/:id/:style/:basename.:extension",
            :path => ":image/:id/:style/:basename.:extension"

配置/应用程序.rb

  # Paperclip (for Amazon) (we use EU servers)
  config.paperclip_defaults = {
    :storage => :s3,
    :s3_host_name => 's3-eu-west-1.amazonaws.com'
  }

配置/s3.yml

#Amazon AWS Config
development:
  access_key_id: **********
  secret_access_key: **************
  bucket: ****

production:
  access_key_id: ***********
  secret_access_key: ***********
  bucket: ****

希望这可以帮助?

于 2013-10-14T11:32:16.700 回答
0

我在迁移到 Spree 2.2 时也遇到了同样的问题,但我仍然不确定如何以正确的方式解决它。似乎 Paperclip 应该从配置中更新路径,但事实并非如此。

由于缺乏更好的解决方案,我重写了 Spree::Image 类,如下所示:

1 Spree::Image.class_eval do
2   has_attached_file :attachment, 
3     styles: { mini: '48x48>', small: '100x100>', product: '240x240>', large: '600x600>' },
4     default_style: :product,
5     url: '/spree/products/:id/:style/:basename.:extension',
6     path: 'products/:id/:style/:basename.:extension',
7     convert_options: { all: '-strip -auto-orient -colorspace sRGB' }·
8 end 
于 2014-04-02T15:29:38.423 回答
0

经过一些实验,我发现:s3_host_name全局设置就足够了。我最终遇到了同样的问题,因为我正在设置:s3_regionPaperclip(post-4.3.1,带有 aws-sdk 2)用于存储附件,但不是在生成 URL 时使用它。

最终解决此问题的读者可能也会对此感兴趣:https ://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

于 2015-10-22T12:06:33.220 回答