无法使用FileResponse或StreamingHttpResponse渲染base64文件,使用HttpResponse进行工作

时间:2018-11-16 11:22:36

标签: python django file base64 httpresponse

我将文件保存在数据库的base64中,然后尝试使用Django视图呈现它。

file_obj = AttachmentData.objects.filter(id=file_id)
file_data = base64.b64decode(file_obj.attachment_file)
bytes_out = BytesIO()
bytes_out.write(file_obj)
response = HttpResponse(string_out.getvalue(),content_type=email_file_obj.mime_type)
response["Content-Disposition"] = "attachment; filename={}".format(name)
return response

此代码工作正常,但是当文件很大时,我需要使用StreamingHttpResponse或FileResponse。问题是这些响应需要文件对象作为参数。要创建文件,我需要保存不需要的文件,因为它会占用我的磁盘空间。

temp_file_obj = open(file_obj.file_name, 'wb')
temp_file_obj.write(file_data)
temp_file_obj.close()
response = FileResponse(open(file_obj.file_name, 'rb'), content_type=email_file_obj.mime_type)

我需要一个解决方案,以便我发送文件而不在磁盘上保存文件。

2 个答案:

答案 0 :(得分:0)

您不需要将真实的文件对象传递给StreamingHttpResponse,您可以将数据本身作为参数。该文档提供了this示例,其中显示了传递一个较大的CSV文件作为响应。您也可以对已存储的数据执行类似的操作。

答案 1 :(得分:0)

您只需在base64上发送类似的数据即可:

file_obj = AttachmentData.objects.filter(id=file_id)
file_data = base64.b64decode(file_obj.attachment_file)
return file_data