我在Flask应用程序中有以下代码:
@app.route('/transform', methods=['POST'])
def transform_view():
//other irrelevant codes
resp = make_response(data1.to_csv())
resp.headers['Content-Disposition'] =
'attachment; filename= export.csv'
resp.headers['Content-Type'] = 'text/csv'
return resp
每当我单击前端的下载csv文件按钮时,export.csv都会下载到Downloads文件夹中。但我想将其导出到我的项目所在的目录,即C:\Users\Admin\Desktop\cracp9\flask
我试着做:
resp.headers['Content-Disposition'] =
"attachment; filename= r'C:UsersAdminDesktopcrap9flaskexport.csv'"
但抛出
文件"。\app.py";,第480行";附件filename=C:\Users\Admin\Desktop\cracp9\flask\export.csv"^
SyntaxError:(unicode错误("unicodeescape"编解码器无法解码字节在位置24-25:截断\UXXXXXXXX转义
这并不是真正回答您的异常/unicode错误,而是关于使用Content-Disposition
的一些建议。。。
attachment
指令并不意味着包含完整路径。参见MDN文档:
文件名始终是可选的,应用程序不得盲目使用:路径信息应被剥离,并应转换为服务器文件系统规则。该参数主要提供指示性信息。当与
Content-Disposition: attachment
组合使用时,它被用作最终"的默认文件名;另存为";对话框。
所以当你提到:
export.csv下载在下载文件夹中。但我想将其导出到我的项目所在的目录,即C:\Users\Admin\Desktop\crap9\flack
选择下载文件夹是因为您的浏览器配置将其作为默认的另存为位置。这不能通过服务器的头进行调整。如果您真的想把它保存到服务器的文件系统中,那么建议使用标准的python方法。类似于:
with open('export.csv', 'wb') as f:
f.write(data1.to_csv())
我认为您可能混淆了服务器的文件系统和客户端的文件系统,因为在这个阶段您正在本地运行应用程序。当部署时,这是两件完全独立的事情。该完整路径将不存在于客户端filestm中,并且使文件可下载给最终用户的transform_view
功能无法指定浏览器下载后将保存到哪个目录。
因此,明智的做法是决定是实际保存到服务器的文件系统,还是在客户端可以选择保存位置的地方下载文件(您仍然可以设置文件名本身(。