如何将zip文件发送到前端以在DRF中下载

时间:2017-01-23 08:33:48

标签: python django download zip django-rest-framework

我正在尝试将zip文件发送到前端,以便可以在浏览器中下载。

Zip文件里面有一个文件夹,这些文件夹中有文件:

file.zip
    - first folder
      - file1.pdf
      - file2.pdf
    - second folder
      - file3.pdf

我认为我需要首先将文件转换为字节以将其作为响应发送,所以我尝试这样做:

zip_file = ZipFile(zip_file_path)

zip_byte_array = bytearray()
for filename in zip_file.namelist():
    byte_content = zip_file.read(filename)
    zip_byte_array.append(byte_content)

return Response(zip_byte_array)

在附加到bytearray时出现以下错误:

an integer is required

该文件夹已存档如下:

zip_file_path = shutil.make_archive(dir_path, 'zip', dir_path)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

好的,事实证明它比我想象的要容易一些。我可以轻松地做到这一点:

zip_file = open(zip_file_path, 'rb')

response = HttpResponse(zip_file, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=name.zip'

return response

答案 1 :(得分:0)

假设附加一个字节数组的整数将具有附加字节的值,因为append主要被理解为向数组添加项的操作,{{1}是一个数字序列。

对于数组连接,只需使用bytearray运算符,如字符串:

+