S3上传后301永久移动 [英] 301 Moved Permanently after S3 uploading
问题描述
我正在尝试使用carrierwave 和fog gems 将图像上传到Ruby on Rails 上的S3,图像已正确上传,但是当我尝试保存包含有关刚刚上传的图像的信息的模型时,我收到此错误:
Im trying to upload images to S3 on Ruby on Rails using carrierwave and fog gems, images are uploaded correctly but when I try tu save the model containing information about the image that was just uploaded Im getting this error:
Excon::Errors::MovedPermanently in UserController#show
app/models/user.rb:46:in `process_image_with_key'
app/controllers/user_controller.rb:12:in `show'
<Excon::Response:0x007f97846a3c18 @body="<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
用户模型:
mount_uploader :image, AvatarUploader
def image_name
File.basename(image.path || image.filename) if image
end
def process_image_with_key( key )
unless key.nil?
self.key = key
self.remote_image_url = self.image.direct_fog_url(with_path: true)
self.save!
end
end
头像上传者:
# encoding: utf-8
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
include CarrierWave::RMagick
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
include CarrierWave::MimeTypes
process :set_content_type
version :thumb do
process resize_to_fill: [50, 50]
end
end
用户控制器
def show
@user = User.find_by_id(params[:id])
@user.process_image_with_key(params[:key])
@uploader = User.new.image
@uploader.success_action_redirect = user_url(@user.id)
end
载波初始化器
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:region => 'us-west-1'
}
config.fog_directory = ENV['AWS_FILE_BUCKET']
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
end
宝石文件
gem 'carrierwave'
gem 'rmagick'
gem 'fog'
gem 'carrierwave_direct'
推荐答案
<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access
must be addressed using the specified endpoint. Please send all future requests to
this endpoint.</Message></Error>
这是一个经常遇到的问题:您正在尝试访问区域 us-west-1 中的存储桶,但是,由于遗留原因,默认的 Amazon S3 区域在大多数/所有AWS SDKs 是美国标准,它使用网络地图自动将请求路由到北弗吉尼亚或太平洋西北部的设施(请参阅区域和端点 了解详情).
This is a frequently encountered issue: You are trying to access a bucket in region us-west-1, however, for legacy reasons the default Amazon S3 region in most/all AWS SDKs is US Standard, which automatically routes requests to facilities in Northern Virginia or the Pacific Northwest using network maps (see Regions and Endpoints for details).
因此,您只需要在使用 S3 API 之前明确指定存储桶区域的端点,例如对于us-west-1:
Therefore you simply need to specify the endpoint of your buckets region explicitly before using the S3 API, e.g. for us-west-1:
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:region => 'us-west-1'
:endpoint => 'https://s3-us-west-1.amazonaws.com/'
}
这篇关于S3上传后301永久移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!