烧瓶send_file:如何知道我是否需要“ as_attachment”?

时间:2019-01-29 16:53:37

标签: http flask content-disposition

Flask有一种返回文件的方法:http://flask.pocoo.org/docs/1.0/api/#flask.send_file

有一个名为as_attachment的参数,默认值为False,并且有一个手工的说法:“为了提高安全性,您可能希望将某些文件作为附件发送(例如HTML)”

我怎么知道我的用例是否是“那些特定文件”?或者换句话说,这与将其保留为False相比有什么作用?

1 个答案:

答案 0 :(得分:1)

您将在同一文档中找到线索,在参数列表的更下方:

  

as_attachment –如果要发送带有True标头的文件,请设置为Content-Disposition: attachment

因此,设置该标志时,会在响应中添加一个额外的标头,该标头控制浏览器如何处理响应。来自MDN documenation on Content-Disposition

  

在常规HTTP响应中,Content-Disposition响应标头是一个标头,指示是否希望在浏览器中以 inline 的形式显示内容,即以网页还是以网页的一部分,或作为附件,可以在本地下载并保存。

没有明确的Content-Disposition标头,来自Flask服务器的text/html响应将在浏览器中显示为网页。如果您需要将文件保存到磁盘(浏览器提示您如何处理文件),则需要设置Content-Disposition: attachment

因此,当您的响应内容类型可能在浏览器中显示为网页,但您希望用户下载它时,请使用as_attachment=True。如今,除了HTML之外,您可能还希望为图像,PDF文件和XML设置该标志。