Я использую boto3 и django-хранилища для загрузки файла в Amazon S3, но не могу заставить его работать, всегда возникает ошибка ConnectionClosedError, но когда я загружаю файл с помощью интерфейса администратора django,это работает, и я вижу файл, загруженный в мое ведро Amazon S3.Я пытался найти решение, но пока безуспешно, что может быть не так?
Вот мой HTML
<form method="post" action="{% url 'upload-document' %}" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-row">
<label for="description">Description</label>
<input id="description"
type="text"
name="description"
value="{{ form_details.description }}"
required>
</div>
<input name="document_type" type="hidden" value="{{ document_type|cut:" " }}">
<input name="document_type_id" type="hidden" value="{{ document_type_id }}">
<div style="margin-top: 20px;" class="form-row">
<label for="file">File</label>
<input id="file"
accept=".pdf"
type="file"
name="document_file"
required>
</div>
<button style="margin-top: 20px; width: 100%;" class="button primary" type="submit">UPLOAD</button>
</form>
Просмотр кода, выполняющего загрузку
description = request.POST['description']
document_type = request.POST['document_type']
document_type_id = request.POST['document_type_id']
document = Document.objects.create(description=description,
document_type=document_type)
document_file = request.FILES['document_file']
document.document_file = document_file
if document_type_id != 0:
document.document_type_id = document_type_id
document.save()
и ниже - мой конфигурационный файл Amazon S3
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_PRELOAD_METADATA = True
AWS_QUERYSTRING_AUTH = False
DEFAULT_FILE_STORAGE = 'app.aws.utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'app.aws.utils.StaticRootS3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'mybucketname'
S3DIRECT_REGION = 'eu-west-2'
S3_URL = '//%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = '//%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL