如何将临时.docx文件添加到django中的zip存档

时间:2014-10-25 04:05:18

标签: python django zipfile python-docx

这是我下载zip文件的代码,包含.docx文件,

def reportsdlserien(request):
    selected_sem = request.POST.get("semester","SS 2016")

    docx_title="Report_in_%s.docx" % selected_sem.replace(' ','_')

    document = Document()
    f = io.BytesIO()

    zip_title="Archive_in_%s.zip" % selected_sem.replace(' ','_')
    zip_arch = ZipFile( f, 'a' )

    document.add_heading("Report in "+selected_sem, 0)
    document.add_paragraph(date.today().strftime('%d %B %Y'))

    document.save(docx_title)
    zip_arch.write(docx_title)
    zip_arch.close()
    response = HttpResponse(
        f.getvalue(),
        content_type='application/zip'
    )
    response['Content-Disposition'] = 'attachment; filename=' + zip_title
    return response

唯一的问题是,它还会创建.docx文件,我不需要它。我也希望将BytesIO用于docx文件,但我无法将其添加到存档中,命令zip_arch.write(BytesIOdocxfile)不起作用。还有其他命令吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

使用writestr()功能向存档添加一些字节:

data = StringIO()
document.save(data)  # Or however the library requires you to do this.
zip_arch.writestr(docx_title, bytes(data.getvalue()))

我只使用StringIO完成此操作,但我不明白为什么BytesIO也能正常工作。