ruby on rails - subir - Las imágenes de Amazon S3 de niebla de Carrierwave no se muestran.
show image carrierwave (1)
He instalado carrierwave y fog, he subido con éxito las imágenes y las he visto la primera vez, pero ahora ya no muestra las imágenes.
Aquí está mi aplicación de configuración / config / initializers / carrierwave.rb
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => ''AWS'', # required
:aws_access_key_id => ''AKIAJKOHTE4WTXCCXAMA'', # required
:aws_secret_access_key => ''some secret key here'', # required
:region => ''eu-east-1'', # optional, defaults to ''us-east-1''
:host => ''https://s3.amazonaws.com'', # optional, defaults to nil
:endpoint => ''https://s3.amazonaws.com:8080'' # optional, defaults to nil
}
config.fog_directory = ''createmysite.co.za'' # required
config.fog_public = false # optional, defaults to true
#config.fog_attributes = {''Cache-Control''=>''max-age=315576000''} # optional, defaults to {}
end
Así es como se ve la URL de la imagen que se supone que debe mostrar
<img alt="Normal_selection_003" src="https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553">
al abrir la URL de la imagen que es la salida de Amazon https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3F179B7CE417BC12</RequestId>
<HostId>
zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65
</HostId>
</Error>
Actualizar
Nuevo archivo de configuración (caducidad agregada de URL de niebla) app / config / initializers / carrierwave.rb
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => ''AWS'', # required
:aws_access_key_id => ''AKIAJKOHTE4WTXCCXAMA'', # required
:aws_secret_access_key => ''chuck norris'', # required
}
config.fog_directory = ''createmysite.co.za'' # required
config.fog_public = false # optional, defaults to true
config.fog_authenticated_url_expiration = 600 # (in seconds) => 10 minutes
end
¡Funciona de maravilla!
Ha configurado config.fog_public
en false
y está utilizando Amazon S3 para el almacenamiento. Las URL para archivos privados a través de S3 son temporales (están firmadas y tienen vencimiento). Específicamente, la URL publicada en su pregunta tiene un parámetro Expires=1354859553
.
1354859553
es Fri, 07 Dec 2012 05:52:33 GMT
, que está en el pasado desde la hora actual, por lo que el enlace ha caducado efectivamente, por lo que está obteniendo el error Access Denied
.
Puede ajustar la caducidad aún más (el valor predeterminado es 600
segundos) configurando
config.fog_authenticated_url_expiration = ... # some integer here
Si quieres enlaces no caducados o bien
- establece
config.fog_public
entrue
-
send_file
que su aplicación actúe como intermediario, sirviendo los archivos a través desend_file
. Here hay al menos una pregunta sobre SO que cubre esto