Не удается отобразить файл base64 с помощью FileResponse или StreamingHttpResponse, работает с использованием HttpResponse - PullRequest
0 голосов
/ 16 ноября 2018

Я сохраняю свой файл в 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 голосов
/ 04 июня 2019

Вы можете просто отправлять такие данные, когда они base64:

file_obj = AttachmentData.objects.filter(id=file_id)
file_data = base64.b64decode(file_obj.attachment_file)
return file_data
0 голосов
/ 16 ноября 2018

Вам не нужно передавать истинный файловый объект в StreamingHttpResponse, вы можете указать сами данные в качестве параметра. Документация предоставляет этот пример, где они показывают передачу большого CSV-файла в качестве ответа. Вы можете сделать что-то подобное с данными, которые вы сохранили.

...