是否可以将excel文件保存到flask中的内存并从中发送?
我想使用openpyxl将excel文件临时保存到内存中,然后将该文件发送到用户的浏览器 假设您有以下flask应用程序:是否可以将excel文件保存到flask中的内存并从中发送?,flask,Flask,我想使用openpyxl将excel文件临时保存到内存中,然后将该文件发送到用户的浏览器 假设您有以下flask应用程序: from flask import send_file from openpyxl import Workbook @app.route('/page', methods=['GET', 'POST']) def func(): wb = Workbook() ws=wb.create_sheet() ws['A1'] = 'Hello World
from flask import send_file
from openpyxl import Workbook
@app.route('/page', methods=['GET', 'POST'])
def func():
wb = Workbook()
ws=wb.create_sheet()
ws['A1'] = 'Hello World'
filename = 'helloworld.xlsx'
wb.save(filename)
wb.close()
return send_file(filename)
如何将文件临时保存到内存(而不是像上面的代码那样保存到flask服务器)并从内存发送给用户
非常感谢您提前更改
import io
from flask import Response
from xlsxwriter import Workbook
from werkzeug import FileWrapper
@app.route('/page', methods=['GET', 'POST'])
def func():
file = io.BytesIO()
wb = Workbook(file)
ws = wb.add_worksheet()
ws.write('A1', 'Hello World')
wb.close()
file.seek(0)
wrapped_file = FileWrapper(file)
return Response(
wrapped_file,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
direct_passthrough=True,
)
这比您要求的要多一点,但完成了请求。我已经包括了一些额外的内容,从我的结束与发送文件从烧瓶艰难的教训。当把它放在生产uwsgi服务器之后(我使用NGINX和uwsgi来为flask应用程序提供服务)时,底层werkzeug库与uswgi服务器进行了一些协调缓冲。Flask的send_文件有时会对较大的excel文件生成NGINX 500错误。我已经切换到直接使用支持Flask的send_文件的底层werkzeug函数,它不会导致任何服务器问题 这适用于非常大的excel文件吗?正如我目前在《熊猫》杂志上读到的那样,我会大量阅读,然后产生内容,但这需要很长的时间,然后会受到影响timeout@mp252它确实要求立即将整个文件读入内存。因此,在决定支持多大的文件时,内存将是您的限制。