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 напрямую.

Вернуться на верх