我刚从存储通过本地Carrierwave上传的图像切换到使用Amazon s3通过我的Rails 3.1应用程序中的雾宝石。在添加图像时,当我单击应用程序中的图像时,URL将提供我的访问密钥和签名。这是一个示例URL(XXX用信息替换了字符串):
https://s3.amazonaws.com/bucketname/uploads/photo/image/2/IMG_4842.jpg?AWSAccessKeyId=XXX&Signature=XXX%3D&Expires=1332093418
这在开发中发生(localhost:3000),当我使用heroku进行生产时。这是我的上传者:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process :convert => :jpg
process :resize_to_limit => [640, 640]
version :thumb do
process :convert => :jpg
process :resize_to_fill => [280, 205]
end
version :avatar do
process :convert => :jpg
process :resize_to_fill => [120, 120]
end
end
我的config / initializers / fog.rb:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'XXX',
:aws_secret_access_key => 'XXX',
}
config.fog_directory = 'bucketname'
config.fog_public = false
end
任何人都知道如何确保此信息不可用?
更新:添加视图和控制器代码: 来自users / show.html.erb中的部分内容:
<% if @user.photos.any? %>
<% for photo in @user.photos %>
<li class="span4 hidey">
<div class="thumb_box">
<%=link_to(image_tag(photo.image_url(:thumb).to_s), photo.image_url.to_s,
:class=>"lb_test") %>
...
</div>
</li>
<% end %>
<% end %>
users_controller.rb:
def show
@user = User.find(params[:id])
end
更新:添加从网址中删除访问密钥信息时收到的错误页面:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>47077D6EC13AD1D8</RequestId>
<HostId>+HTeODcWTqv3gbRIAwf+lI6sPzfNTegDXjT9SnMdqrYr7gLD1TD0qN+OgMLwA1JO
</HostId>
</Error>
答案 0 :(得分:6)
删除
config.fog_public = false
这是一个非默认值:)
答案 1 :(得分:4)
您看到的是签名网址。如果没有完整的URL(包括密钥,签名,过期),您将获得拒绝访问权限。它完全按照预期工作。我猜测密钥只是一个公钥,没有你的私钥(AWS有),这是没用的。
答案 2 :(得分:-1)
尝试使用photo.image.url而不是photo.image_url。这就是我正在使用的。