Flask中返回Excel的若干种方案

本文记录了Flask中返回Excel的常见方案。

from flask import Flask, send_from_directory, Response, make_response
import pandas as pd
import os
import mimetypes

app = Flask(__name__)

# 1. 方案一:以静态文件的形式返回
@app.route('/download_file/<path:filepath>/', methods=["GET"])
def download_file(filepath):
    return app.send_static_file(filepath)
    
# 2. 方案二:保存服务器,以文件的方式直接返回
@app.route('/download__xls', methods=["GET"])
def download_xls():
	return send_from_directory(directory='./', filename='1.xlsx', as_attachment=True)

# 3. 方案三:打开存储文件,以二进制流文件形式返回
@app.route('/download__xls', methods=["GET"])
def download_xls():
	results = open('./1.xlsx', 'rb').read()
   	return Response(results, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
   					headers={"Content-Disposition": 'attachment; filename=sample.xlsx'})

# 4. 方案四:处理后直接以二进制流文件形式返回,不消耗本地存储空间。这里以pandas处理为例
@app.route('/download__xls', methods=["GET"])
def download_xls():
        bio = os.BytesIO()
        writer = pd.ExcelWriter(bio, engine='xlsxwriter')
		
		# 省略pandas处理结果,results为最后生成的dataframe对象
        results.to_excel(writer, sheet_name='结果汇总')
        writer.save()

        bio.seek(0)    # 文件指针
        rv = make_response(bio.getvalue())
        bio.close()

        # mime_type = mimetypes.guess_type(results)[0]  # 文件类型
        rv.headers['Content-Type'] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        rv.headers["Cache-Control"] = "no-cache"
        rv.headers['Content-Disposition'] = 'attachment; filename={}.xlsx'.format('Output')

        return rv
  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值