一尘不染

如何在flask中更改下载名称?

flask

我有一个小项目,必须响应一些文件。我知道使用nginx会是一个更好的决定,但是文件很小。

我程序的一部分:

return send_file(os.path.join(filepath, filename))

该行返回的文件名类似,download没有任何格式或类似形式。已下载的文件名始终相同,并不取决于文件的真实名称。文件的真实名称是table.csv。如何返回带有正确文件名的文件?


阅读 682

收藏
2020-04-07

共1个答案

一尘不染

你需要Content-Disposition: attachment; filename=....为浏览器设置HTTP标头以使用正确的文件名。

你可以send_file()通过设置as_attachment=True参数来设置此标头。然后从传入的文件对象中获取文件名。使用attachment_filename参数显式设置其他文件名:

return send_file(os.path.join(filepath, filename), as_attachment=True)

从flask.send_file文档中:

  • as_attachment–设置为True是否要发送带有Content-Disposition: attachment标题的文件。
  • attachment_filename –附件的文件名(如果与文件名不同)。
    你可能想改用该flask.send_from_directory()函数。该函数首先确保文件名存在(NotFound如果不存在,则引发),并确保文件名不包含任何..可能用于“转义”目录的相对元素。将此文件用于所有来自不受信任来源的文件名:
return send_from_directory(filepath, filename, as_attachment=True)
2020-04-07