Zip和服务器多个内存中的文件

时间:2017-09-21 02:36:48

标签: python cherrypy zipfile

我目前正在使用下面的代码生成word文档,然后使用cherrypy在网上提供。

tpl.get_docx().save(iostream)
cherrypy.response.headers['Content-Type'] = (
            'application/vnd.openxmlformats-officedocument'
            '.wordprocessingml.document'
            )
cherrypy.response.headers['Content-Disposition'] = (
            'attachment; filename={fname}.docx'.format(
                fname='SP' + kwargs['sp'] + '-'+ kwargs['WO'] + ' ' + kwargs['site'] + ' - ' + 'RPC Report'  +'.docx'
            )
            )
iostream.seek(0)
return file_generator(iostream)

我计划创建更多文档,然后将其压缩到内存中,然后在网络上提供。怎么可能这个,我已经尝试使用zipfile库,它似乎复杂拉链内存文件。

以下示例我谷歌周围可能会解决我的问题,但不知道如何使用它。

import zipfile
import StringIO

zipped_file = StringIO.StringIO()
with zipfile.ZipFile(zipped_file, 'w') as zip:
    for i, file in enumerate(files):
        file.seek(0)
        zip.writestr("{}.csv".format(i), file.read())

zipped_file.seek(0)

1 个答案:

答案 0 :(得分:2)

经过几个小时的坚持,我得到了这个工作,是啊

iostream = BytesIO()
tpl.get_docx().save(iostream)

iostream1 = BytesIO()
tpl1.get_docx().save(iostream1)

zip_output = StringIO.StringIO()
file = zipfile.ZipFile(zip_output, "w")
file.writestr("test.docx", iostream.getvalue())
file.writestr("test1.docx", iostream1.getvalue())
file.close()

cherrypy.response.headers['Content-Type'] = 'application/zip'
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename="test.zip"'

return zip_output.getvalue()