专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

bottle直接输出文件下载及动态生成excel下载的实现

直接下载文件

import bottle
import sys
import os
import logging
import urllib.parse
from bottle import error,route, default_app, get, run, request, hook, response, static_file
import json

#def to_json(obj):
#    return json.dumps(obj,ensure_ascii=False)#防止中文乱码

@get('/api/filedownload/')#<filename>
def file_download():#filename
    #def send_chunk():                                       # 流式读取
    print('start')
    fname='测试test.csv'
    store_path = 'F:/vs/stocks/stock_basic_list.csv'#%s' % filename
    response.set_header('Content-Type', 'application/octet-stream')
    response.set_header('Content-Disposition','attachment;filename="{}"'.format(fname))
    response.set_header('Tansfer-Encoding','chunked')
    with open(store_path, 'rb') as target_file:
        while True:
            chunk = target_file.read(20 * 1024 )  #* 1024 每次读取20M
            print(len(chunk))
            if not chunk:
                break
            yield chunk

    #return b'abcde'
# 函数主入口
if __name__ == '__main__':
    #加入session插件

    run(app=default_app(), host='0.0.0.0', port=9090, debug=True, reloader=True)

动态生成excel并下载

def callback():
    """
    获取列表数据
    """
    # 实例化phcodes表操作类CurrFlowLogic
    _phcodes = base_logic_codes.Codes_Logic()
    sqlstr='SELECT A.id, A.telcode as 预选号, A.isowner as 是否已选, B.orgname as 单位, A.uname as 姓名, A.uphone as 联系方式, A.slttm as 预选时间, C.packagename as 套餐,D.jtbmc as 集团包 \
    FROM public.tbl_phonecodes A left join tbl_org B on A.orgid=B.id left join tbl_package C on A.packageid=C.id left join tbl_jtb D on A.jtbid=D.id where A.id<>147 order by A.id'
    result = _phcodes.select(sqlstr)
    df=pd.DataFrame(result)
    #print(df)
    tm=datetime.datetime.now().strftime('%Y-%m-%d_%H%M%S')
    fname='选号记录导出'+tm+'.xlsx'
    utf_filename=quote(fname.encode('utf-8'))#防止不同浏览器乱码
    response.set_header('Content-Type','application/octet-stream;charset=utf-8')
    #response.add_header('Content-Type','text/html;charset=utf-8')
    response.set_header('Content-Disposition','attachment;filename="{}"'.format(utf_filename))
    #response.set_header('Transfer-Encoding','chunked')

    fpath=NamedTemporaryFile()#(mode='w+t',delete=True)#,encoding='utf-8-sig'
    #print(fpath.name)

    #bytes_data_io = io.BytesIO()
    #fpath=io.StringIO()#io.BytesIO()#'e:/tt.csv'openpyxl

    #-----------csv格式文件,注意修改上面的扩展名
    #df.to_csv(fpath, sep=',',header=True,na_rep='',line_terminator='\n',encoding='utf-8-sig', index=False)
    #==========  line_terminator,windows下默认是‘\r\n’会有空行。encoding='utf-8-sig'才不会乱码

    #------------ xlsx格式文件
    df['预选时间']= pd.to_datetime(df['预选时间'].values, utc=None,format='%Y-%m-%d %H:%M:%S', unit='s')# csv 格式不用此转换
    df.to_excel(fpath,sheet_name='Sheet1',engine='xlsxwriter', header=True,freeze_panes=(1,3),na_rep='',encoding='utf-8-sig', index=False)
    #==========  
    fpath.seek(0)
    while True:
        chunk = fpath.read(20*1024)#*1024
        #print(len(chunk))
        if not chunk:
            fpath.close()
            break
        yield chunk

文章永久链接:https://tech.souyunku.com/42135

未经允许不得转载:搜云库技术团队 » bottle直接输出文件下载及动态生成excel下载的实现

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们