关于content-type=application/octet-stream

442 阅读1分钟

application/octet-stream

通过设置请求头'Content-Type': 'application/octet-stream', 告知浏览器这是一个二进制文件,并结合Content-disposition告知浏览器,该二进制文件的文件名(如:Content-disposition:attachment; filename=MyFileName.xlsx)

什么时候会用到

当需要实现数据导出或文件下载功能时会用到

设置content-type=application/octet-stream后会自动下载吗?

这里得说个前提,通常前端都是发一个ajax请求,请求结果'Content-Type': 'application/octet-stream'

但ajax并不能自动下载文件,拿到了ajax响应结果之后,可以用 js 新建一个隐藏的 a 标签(标签的 href 指向文件的链接),执行它的 click 事件,就可以下载文件了,不过需要注意的事,创建的 a 标签中要添加一个 download 属性。

对于a标签的download 属性,对于浏览器能打开得文件,例如 html,xml 等,如果你不加 download,点击 a 标签就不是下载了,而是打开,(注意 download 属性目前只被火狐和谷歌兼容)

参考资料

这个文件下载问题难住了我至少三位同事 - 掘金 (juejin.cn)