Error al cargar en una aplicación AWS S3 no estándar de los EE. UU. En la aplicación Django; El cubo estándar de los Estados Unidos funciona perfectamente

Configuré un cubo S3 en una región no estadounidense (Singapur). Cuando bash cargar imágenes en él, recibo un error 301 ( Movido permanentemente) de S3. La investigación me ha llevado a comprender que para un grupo no estándar, uno debe especificar el punto final y la región en particular.

He intentado una variedad de variables de configuración en mi settings.py, pero nunca funciona. Tenga en cuenta que los almacenes de boto y django están instalados, y lo he hecho funcionar antes para una cubeta estándar de los EE. UU.

A continuación se muestra cómo está configurado actualmente (más todas las variaciones que he probado):

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' AWS_S3_FORCE_HTTP_URL = True AWS_S3_SECURE_URLS = False AWS_S3_URL_PROTOCOL = 'http' AWS_QUERYSTRING_AUTH = False AWS_SECRET_ACCESS_KEY = os.environ.get('awssecretkey') AWS_ACCESS_KEY_ID = os.environ.get('awsaccesskeyid') AWS_S3_CALLING_FORMAT='boto.s3.connection.OrdinaryCallingFormat' AWS_STORAGE_BUCKET_NAME = 'bucket.my' #HOST ='s3-ap-southeast-1.amazonaws.com' #AWS_ENDPOINT = 's3-ap-southeast-1.amazonaws.com' #AWS_S3_REGION = 's3-ap-southeast-1' #REGION = 's3-ap-southeast-1' #AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME #BOTO_S3_HOST = 'bucket.my.s3-ap-southeast-1.amazonaws.com' #S3_HOST = 'http://bucket.my.ap-southeast-1.amazonaws.com' #'bucket.my.s3-website-ap-southeast-1.amazonaws.com' #'s3-ap-southeast-1.amazonaws.com' #BOTO_BUCKET_LOCATION = 'Singapore' #S3Connection.DefaultHost = 's3-ap-northeast-1.amazonaws.com' #HOST = 'http://bucket.my.ap-southeast-1.amazonaws.com' 

¿Alguien puede ayudarme con la configuración correcta? Te proporcionaré más detalles en caso de que los necesites.

Estoy usando la versión actual de django-storages-redux y tuve que usar lo siguiente en settings.py para usar la región Sydney S3.

 import boto from boto.s3.connection import OrdinaryCallingFormat, Location DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' AWS_ACCESS_KEY_ID = 'XXX' AWS_SECRET_ACCESS_KEY = 'XXX' AWS_STORAGE_BUCKET_NAME = 'my.bucket.name' AWS_AUTO_CREATE_BUCKET = False AWS_S3_HOST = 's3-ap-southeast-2.amazonaws.com' AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat' 

Tenga en cuenta el valor AWS_S3_HOST; ese es el parámetro que necesitaba para resolver el error “301 (Movido permanentemente)”.

“Singapur” no es una “región” válida en el sentido que necesita, aquí:

 AWS_S3_REGION = 'ap-southeast-1' 

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Puede que este no sea el único problema, pero al menos debería ser uno de los problemas.

 AWS_AUTO_CREATE_BUCKET = True AWS_S3_HOST = 's3-eu-west-1.amazonaws.com' 

Esto funciona también para los almacenes django. Gracias @ gmcc051