从 python (flask) 网络服务向浏览器提供文件
Serve file to browser from python (flask) webservice
我有一个 python 网络服务,它应该从浏览器接收 GET 请求,将一些数据写入 csv 文件并将其返回给浏览器。
我正在努力完成最后一步。如何将文件返回给浏览器?有没有办法在不在服务器上创建或保留 csv 文件的情况下做到这一点?
@app.route('/', methods = ['GET'])
def get_file():
alldata = []
while len(new_data) > 0:
new_data = api.timeline(max_id=oldest)
alldata.extend(new_data)
oldest = alldata[-1].id - 1
outdata = [[info.id_str] for data in alldata]
#write the csv
with open('data.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(outdata)
pass
if __name__ == '__main__':
app.run(host = app.config['HOST'], port = app.config['PORT'])
您可以 return 像这样
而不是将文件写入磁盘:
from flask import make_response
outdata = ""
for data in alldata:
outdata += ",".join(data) + "\n"
response = make_response(outdata)
response.headers["Content-Disposition"] = "attachment; filename=data.csv"
return response
或者,如果您确实想将文件写入磁盘,您可以使用 send_from_directory
:
return send_from_directory('my_app', 'data.csv')
我有一个 python 网络服务,它应该从浏览器接收 GET 请求,将一些数据写入 csv 文件并将其返回给浏览器。
我正在努力完成最后一步。如何将文件返回给浏览器?有没有办法在不在服务器上创建或保留 csv 文件的情况下做到这一点?
@app.route('/', methods = ['GET'])
def get_file():
alldata = []
while len(new_data) > 0:
new_data = api.timeline(max_id=oldest)
alldata.extend(new_data)
oldest = alldata[-1].id - 1
outdata = [[info.id_str] for data in alldata]
#write the csv
with open('data.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(outdata)
pass
if __name__ == '__main__':
app.run(host = app.config['HOST'], port = app.config['PORT'])
您可以 return 像这样
而不是将文件写入磁盘:from flask import make_response
outdata = ""
for data in alldata:
outdata += ",".join(data) + "\n"
response = make_response(outdata)
response.headers["Content-Disposition"] = "attachment; filename=data.csv"
return response
或者,如果您确实想将文件写入磁盘,您可以使用 send_from_directory
:
return send_from_directory('my_app', 'data.csv')