一直在写接收JSON参数的接口,这次写从数据的参数,记录下
1.接收上传的文件
user_id = request.form.get("user_id", "") # text参数获取
file = request.files['files'] # 文件参数获取
sheet = pd.read_excel(file,header=0)
field=sheet.columns # 获取表头
for i in range(0,len(sheet)):
body={k:sheet[k][i] for k in field} # 获取表格内容
2.返回文件,提供下载
from xlrd import open_workbook
from xlutils.copy import copy
from flask import Response
from os import path
@api.route("/download", methods=["POST"])
def download():
try:
names = ["TITLE","AUTHOR","CONTENT"]
filepath = path.join(FOLDER, r'model/base.xls')
if not os.path.exists(filepath):
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('sheet 1', cell_overwrite_ok=True)
for index in range(0, len(names)):
sheet.write(0, index, name[index])
wbk.save(filepath)
else:
rb = open_workbook(filepath)
cols = rb.sheet_by_index(0).ncols
wb = copy(rb)
ws = wb.get_sheet(0)
for index in range(0, len(names)):
ws.write(0, index, names[index])
if len(names) < cols:
for index in range(len(names), cols):
ws.write(0, index, "")
wb.save(filepath)
response = Response(file_iterator(filepath))
response.headers['Content-Type'] = 'application/octet-stream'
response.headers["Content-Disposition"] = 'attachment;filename="{}"'.format(filepath)
return response
except Exception as e:
return "服务器发生错误"
def file_iterator(file_path, chunk_size=512):
"""
文件读取迭代器
:param file_path:文件路径
:param chunk_size: 每次读取流大小
:return:
"""
with open(file_path, 'rb') as target_file:
while True:
chunk = target_file.read(chunk_size)
if chunk:
yield chunk
else:
break
3.根据模板文件生成txt文件并下载
from flask import send_from_directory
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('data'))
template = env.get_template('base_txt.j2')
content = template.render(name="test",job="teacher")
fobj = open(r'data/model/{0}.txt'.format("111"), 'w', encoding='utf-8')
fobj.write(content)
fobj.close()
return send_from_directory(os.path.dirname(os.path.abspath(fobj.name)),
os.path.basename(fobj.name), as_attachment=True)
模板文件放在data/templates/base_txt.j2
名字是{{name}},职业是{{job}}