我将文件保存在数据库的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)
我需要一个解决方案,以便我发送文件而不在磁盘上保存文件。
答案 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