Python 在Django应用程序中上载到非美国标准AWS S3存储桶时出错;美国标准水桶工作完美

Python 在Django应用程序中上载到非美国标准AWS S3存储桶时出错;美国标准水桶工作完美,python,django,amazon-web-services,amazon-s3,Python,Django,Amazon Web Services,Amazon S3,我在非美国地区(新加坡)设立了一个S3存储桶。当我尝试将图像上传到它时,我从S3得到一个301(永久移动)错误。通过研究,我了解到,对于非标准桶,必须指定特定的端点和区域 我在我的settings.py中尝试了各种配置变量,但都不起作用。注意,已经安装了boto和django存储,我以前已经让它在美国标准的bucket中工作过 以下是它当前的设置方式(加上我尝试过的所有不同变体): 有人能帮我做正确的配置吗?如果你需要的话,我会提供更多的细节 “新加坡”不是您需要的有效“地区”,这里: AWS_

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

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

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

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

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

AWS_S3_REGION = 'ap-southeast-1'


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

我使用的是django storages redux的当前版本,为了使用Sydney S3区域,我必须在settings.py中使用以下内容

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_主机值;这就是我解决“301(永久移动)”错误所需的参数


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

很遗憾,这两个都没用。请注意,如果我将AWS_STORAGE_BUCKET_NAME更改为美国标准BUCKET,我的代码工作正常(意味着所有依赖项都正确设置了?)。是的,如果它在美国标准中工作,则表明依赖关系是有序的。该区域应为“ap-Southwest-1”。。。请注意,如果不使用SSL,VHostCallingFormat应该可以。注意调用格式Michael(谢谢)。Vis-a-Vis如何指向正确的端点/区域,您可以向我提供其他线索吗?我现在在这里做了很多实验。我自己编写与AWS交互的代码,使用API期望的原始本机格式,而不是使用任何库或SDK,正是出于这个原因——我不喜欢隐藏的功能和猜测。我可能应该删除这个答案,因为它不能完全解决“说服”底层代码做正确事情的问题。我没有任何进一步的建议。保留它,可能会帮助其他人,因为没有太多关于这个特定方法(对于Django)的建议。我还将编辑我的问题,以包括我从昨天开始尝试的所有配置。也许其他人有一个灯泡的时刻。我可能最终会接受你的方法。请编辑你的问题并包括你收到的错误。@tedder42:它始终是301永久删除的错误。即,假设违约;这桶是美国标准的。除了301错误之外,上面的任何变化都不会产生任何其他结果。但请随意告诉我你是如何做到的,即使我以前尝试过,我也会尝试(有时可能会错过一个小而重要的区别)。
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_AUTO_CREATE_BUCKET = True
AWS_S3_HOST = 's3-eu-west-1.amazonaws.com'