Я пытаюсь загрузить файл в корзину с помощью Django. Файл поступает из представления, очищается, а затем загружается в s3 с помощью служебной функции в модели.
вот функция загрузки:
def upload_file(file_obj, object_name=None):
"""Upload a file to an S3 bucket
:param file_obj: File to upload
:param object_name: S3 object name. If not specified then file_obj is used
:return: True if file was uploaded, else False
"""
bucket = settings.BUCKET
# If S3 object_name was not specified, use file_obj
if object_name is None:
object_name = file_obj
s3 = boto3.client('s3')
try:
s3.upload_fileobj(file_obj.open(), bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
возвращается ошибка:
File "/opt/profiles/profiles/core/utils.py", line 217, in upload_file
s3.upload_fileobj(file_obj.open(), bucket, object_name)
File "/usr/local/lib/python3.8/site-packages/django/core/files/uploadedfile.py", line 90, in open
self.file.seek(0)
ValueError: I/O operation on closed file.
Теперь, что странно для меня, так это то, что ошибка исходит от file_obj.open(), какой смысл в методе open, который не может открыть закрытый файл? Я не хочу передавать request.file прямо из представления, как у меня в установщике свойств, и хотел бы, чтобы он срабатывал всякий раз, когда свойство изменяется в модели, но я просто не могу понять, каким должен быть правильный процесс .