gpt4 book ai didi

Django 存储亚马逊 S3,给出 400 个错误的请求异常

转载 作者:行者123 更新时间:2023-12-04 15:19:24 25 4
gpt4 key购买 nike

这是我第一次尝试将 AWS S3 用于媒体存储。该应用程序托管在 Heroku 中,对于静态文件,这不是问题,所以我不想更改静态文件,但希望应用程序用户上传我希望存储在 S3 中的文件和图像。到目前为止,我已经花了 2-3 天,但没有找到合适的解决方案,因为我在没有正当理由的情况下收到 400 异常。
这是我提到的文档:
http://tech.marksblogg.com/file-uploads-amazon-s3-django.html
所以,我现在的设置:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_S3_ACCESS_KEY_ID='dummyid'
AWS_S3_SECRET_ACCESS_KEY='dummykey'
AWS_STORAGE_BUCKET_NAME='dummyname'
AWS_QUERYSTRING_AUTH = False
AWS_HEADERS = {'Cache-Control': 'max-age=86400', }
MEDIAFILES_LOCATION = 'media'
MEDIA_URL = 'http://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME

我的型号:
class DummyDocuments(models.Model):
document = models.FileField(upload_to='documents')

我的表格:
class DummyUploadForm(forms.Form):
documents = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

这是我使用它的 View :
def upload(request):
if request.method == 'POST':
form = DummyUploadForm(request.POST, request.FILES)
if form.is_valid():
files = request.FILES.getlist('documents')
for file in files:
instance = DummyDocuments(document=file)
instance.save()
return redirect('activation_upload')
else:
form = DummyUploadForm()

documents = DummyDocuments.objects.all()

return render(request, 'activation/dummyupload.html', {'form': form, 'documents': documents})

这是我在 AWS 上的 CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

这是我得到的异常(exception):
enter image description here

我可以知道到底出了什么问题吗?

解决方案

所有这些 django 存储库都没有记录。我浏览了很多不同的文章来解决这个问题。
你需要这个设置:
AWS_S3_HOST = 's3.ca-central-1.amazonaws.com'

和, ~/.boto配置内容:
[Credentials]
aws_access_key_id=yourid
aws_secret_access_key=yourkey

[s3]

host=s3.ca-central-1.amazonaws.com

最佳答案

我相信这是由 this issue 引起的(假设所有凭据和其他设置都正确,但它会抛出 400 错误而不是 403)。 .

结果,两个选项似乎是:

  • 切换区域(如评论中所述,我昨天在安装新的 boto 时遇到了这个问题,并从伦敦切换到都柏林,没有进一步更改就进行了纠正)
  • 添加文件 ~/.boto 并按照 Martin's 添加以下内容对该线程的评论。:
    [s3]host=s3.eu-central-1.amazonaws.com

  • 替换为您的适当区域。您可以通过 touch ~/.boto 创建文件并从那里编辑它,或者简单地做 nano ~/.boto并保存它。

    关于Django 存储亚马逊 S3,给出 400 个错误的请求异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807778/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com