FileResponse с файлом, открытым с помощью smart-open
Я пытаюсь позволить пользователю загрузить файл с моей веб-страницы. Файл находится в ведре S3, к которому я обращаюсь с помощью smart-open. Проблема заключается в том, как совместить это с FileReader. В настоящее время я получаю TypeError: "ожидается объект str, bytes или os.PathLike, а не Reader". Типы файлов будут .txt, .pdf и .doc/.docx
Мое мнение:
@api_view(['GET'])
def download_attachment(request, pk):
session = boto3.Session(aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
obj = Attachment.objects.get(id=pk)
with smart_opener(f's3://______media/public/{str(obj)}',"rb",transport_params={'client':session.client('s3')}) as attachment:
response = FileResponse(open(attachment, 'rb'))
response['Content-Disposition'] = f'attachment; filename={obj.file.name}'
return response
Функция
Вернуться на верх
open
ожидает путь к файловой системе в качестве первого позиционного аргумента для открытия файла, расположенного в файловой системе вашего компьютера. Вот почему вы получаете TypeError
. Я не знаю, что делает smart_opener()
, но если она возвращает файлоподобный объект, то этот объект должен быть передан в FileResponse
напрямую.