Django应用程序中上传到非美国标准AWS S3 Bucket时出错;美国标准铲斗完美工作



我在非美国地区(新加坡(设置了一个S3存储桶。当我尝试将图像上传到它时,我从S3收到一个301(永久移动(错误。研究让我明白,对于非标准bucket,必须指定特定的端点和区域。

我在settings.py中尝试了各种配置变量,但始终不起作用。请注意,已经安装了boto和django存储,我以前也让它为美国标准存储桶工作过。

以下是它目前的设置方式(加上我尝试过的所有不同变体(:

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'

有人能帮我正确配置吗?如果你需要的话,我会提供更多的细节。

我使用的是当前版本的django storages redux,必须在settings.py中使用以下内容才能使用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'

注意AWS_S3_HOST值;这是我需要解决"301(永久移动("错误的参数。

"新加坡"不是您需要的有效"地区",这里:

AWS_S3_REGION = 'ap-southeast-1'

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

这可能不是唯一的问题,但至少应该是问题之一。

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

这也适用于django存储。感谢@gmcc051

相关内容

最新更新