使用智能打开打开的文件的FileResponse



我正试图让用户从我的网页下载一个文件。该文件位于我正在使用智能打开访问的S3存储桶中。我遇到的问题是如何将其与FileReader相结合。目前我收到一个TypeError:";应为str、字节或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