Flask-将压缩文件夹发送回用户的问题

时间:2019-10-12 14:33:13

标签: python flask zipfile stringio bytesio

我正在尝试将压缩文件中的excel文件发送回用户浏览器。

我使用openpyxl构建excel文件,这是我的代码:

@app.route('/test', methods=['GET', 'POST'])
    def test():

        # ...

        from zipfile import ZipFile

        # ...        

        buf = BytesIO()
        wb.save(buf)
        buf.seek(0)

        with ZipFile(buf, 'w') as myzip:
            myzip.write(buf, arcname='test.xlsx')

        return send_file(myzip, attachment_filename='folder.zip', as_attachment=True)

但是,出现以下错误:

  

TypeError:状态:路径应为字符串,字节,os.PathLike或整数,而不是_io.BytesIO

如何在不使用bytesio对象的情况下执行此操作?还是我可以修改代码,使其可以容纳bytesio对象?

非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试此代码。

@app.route('/test', methods=['GET', 'POST'])
    def test():

        # ...

        from zipfile import ZipFile

        # ...        

        buf = BytesIO()
        wb.save(buf)
        buf.seek(0)

        filename = 'folder.zip' # assuing zip file u need
        with ZipFile(filename, 'w') as myzip:
            myzip.writestr(zinfo_or_arcname='test.xlsx', bytes=buf.read())

        return send_file(myzip, attachment_filename='folder.zip', as_attachment=True)

使用writestr代替write

进行更改
        filename = 'folder.zip' # assuing zip file u need
        with ZipFile(filename, 'w') as myzip:
            myzip.writestr(zinfo_or_arcname='test.xlsx', bytes=buf.read())