如果在响应中使用此标头[Content-Disposition:附件],则
具有application / octet-stream内容类型,则隐式
建议用户代理不显示响应,而是
直接输入“将响应另存为...”对话框。
我读为
Content-Type: application/octet-stream
Content-Disposition: attachment
但是我会认为
Content-Type
是application/pdf
,image/png
等。如果我想让浏览器下载文件?
#1 楼
否。如果知道的话,内容类型应该是已知的。
application/octet-stream
在RFC 2046中定义为“任意二进制数据”,在这里有一定的重叠之处,适用于其唯一预期目的是保存到磁盘,并且从此以后不在任何“ webby”之外的实体。或者从另一个方向看它;安全地使用application / octet-stream唯一可以做的就是将其保存到文件中,并希望其他人知道它的用途。如Content-Disposition
或什至image/png
,表示您要保存而不是显示。以前,有些浏览器会在text/html
情况下忽略它,但是我认为这是很久以前的事情了(我很快就要入睡了,所以我不会开始测试一大堆东西) RFC 2616还提到了扩展令牌的可能性,如今,大多数浏览器都认识到
text/html
表示您确实希望在可能的情况下显示该实体(也就是说,如果一种浏览器知道如何显示的类型,否则就别无选择)。无论如何,这当然是默认行为,但这意味着您可以在标头中包含inline
部分,浏览器将使用该部分(也许进行了一些调整,因此文件扩展名与所涉及内容类型的本地系统规范相匹配,也许没有)作为用户尝试保存的建议。因此:
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"
意思是“我不知道这是什么鬼东西。请保存为文件,最好命名为picture.png“。
Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"
表示“这是PNG图片。请保存为文件,最好命名为picture .png”。
Content-Type: image/png
Content-Disposition: inline; filename="picture.png"
意思是“这是一个PNG图片。除非您不知道如何显示PNG图片,否则请显示它。否则,或者如果用户选择保存它,我们建议您将图片另存为文件的名称picture.png”。
在识别
filename
的浏览器中,有些会一直使用它,而如果用户选择了“另存为”,而另一些会在查看时(或在至少IE曾经是这样,它可能在几年前发生了变化。
评论
这是一个很好的答案,如果事情能那样做的话,那真的很好。但不幸的是,所有浏览器都已损坏。例如,如果这是您从表单中获得的答复,则Google Chrome将不会为您打开“文件保存”窗口,即使包括“ application-octet-stream”作为内容类型,无论是否包含“ Content-Disposition:附件” 。然后他们会打印一条消息,说您可能正在受到攻击...根本没有办法让我保存文件。即使您只想保存文件,也必须配置xdg-open。我对此感到厌烦。
–除以零
2015年4月4日在17:44
@dividebyzero不是我遇到的问题,包括Chrome。您的工作还有其他异常之处吗?
–琼·汉娜(Jon Hanna)
15年4月4日在17:50
上载具有默认enctype的文件将是不正确的,并且可能是这样的结果触发了一些攻击检测,而不仅仅是使文件内容可用。
–琼·汉娜(Jon Hanna)
15年4月4日在18:22
@Wilt如果客户端要保存它,那么发送什么标题都没有关系(您可以在浏览器中的任何内容上“保存”或“将链接另存为”),因为标题是信息,而不是规则,因此附件可以被认为是“最好不要自己显示此信息”,而内联则应被视为“如果可能的话最好自己显示此信息”。无论哪种方式,大多数浏览器都将使用文件名值作为建议的文件名,但用户始终可以覆盖该文件名。
–琼·汉娜(Jon Hanna)
2015年4月9日在14:12
@Tresdin谢谢。我有点不高兴,它相对于我认为更好的其他应用程序如此受欢迎,但我想它一定已经解决了人们的问题。
–琼·汉娜(Jon Hanna)
15年7月18日在8:39