我编写了一个函数,可以动态生成一些 csv 文件并发送给用户进行下载。
代码如下:
@app.route('/survey/<survey_id>/report')
def survey_downloadreport(survey_id):
survey, bsonobj = survey_get(survey_id)
resps = response_get_multi(survey_id)
fields = ["_id", "sid", "date", "user_ip"]
fields.extend(survey.formfields)
csvf = StringIO.StringIO()
wr = csv.DictWriter(csvf, fields, encoding = 'cp949')
wr.writerow(dict(zip(fields, fields)))
for resp in resps :
wr.writerow(resp)
csvf.seek(0)
now = datetime.datetime.now()
report_name = survey.name + "(" + \
now.strftime("%Y-%m-%d-%H:%M:%S") +\
")" + ".csv"
report_name = report_name.encode("utf-8")
return send_file(csvf,
as_attachment = True,
attachment_filename = report_name)
如您所见,文件名从 unicode 转换为字符串和 utf-8(准确地说,它们是韩文字母。)
问题是,在 IE 中查看页面时文件名完全中断(在 chrome 中没有问题)。
似乎必须编辑标题以匹配不同浏览器的解析规则,但我不知道如何在烧瓶中做到这一点。