侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论
Web

文件流响应的简单处理

barwe
2021-11-19 / 0 评论 / 0 点赞 / 916 阅读 / 1,384 字
温馨提示:
本文最后更新于 2022-07-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

响应头中的 content-type 字段标识了响应数据的类型,响应的数据可能是普通文档(例如HTML文档、JSON数据等)、文件或者字节流等格式。响应数据的类型被称之为 MIME类型 (Multipurpose Internet Mail Extensions),它是一种标准,用来规范响应数据的性质和格式。浏览器通过响应的 MIME 类型来确定如何处理响应数据,如果服务器配置的 MIME 类型不正确,可能会导致浏览器不能正确处理响应数据。

MIME类型(即响应头中的 content-type 字段)的格式为 TYPE/SUB_TYPE,不允许空格,大小写不敏感。浏览器不会自动识别文件类型,而是通过 MIME 类型简单判断,例如将一个 css 文件的 MIME 类型设为 text/plain,浏览器不会将其视为一个有效的 css 文件;一个被浏览器识别的有效 css 文件需要使用 text/css 类型。

TYPE 的取值可以是:

  • text 普通文本,可以直接在浏览器中查看和读取
  • image 图像文件,包括动态图,不包括视频
  • audio 音频文件
  • video 视频文件
  • application 某种二进制数据
  • multipart 一种特殊的类型

重要的 MIME 类型

文本文件

常见文本文件类型:

  • text/plain 未知的文本文件类型(文本文件默认类型),浏览器可以直接展示
  • text/html HTML 内容
  • text/javascript JavaScript 文件

图像文件

安全的图像文件类型:

  • image/gif
  • image/jpeg
  • image/png
  • image/svg+xml

image/webp 尚未被添加到标准中。

浏览器还额外支持一些其他的图片类型,例如 image/x-icon 表示 ICO 图片。

image/vnd.microsoft.icon 虽然在标准里注册了,但是大家不怎么用它,而是使用 image/x-icon。

音频和视频文件

  • audio/wave
  • audio/wav
  • audio/x-wav
  • audio/x-pn-wav
  • audio/webm
  • video/webm
  • audio/ogg
  • video/ogg
  • application/ogg
  • application/json ???

一般二进制文件

  • -12pxapplication/octet-stream 二进制文件默认类型,未知的二进制文件

文件流响应的处理

后台发送了一个文件流到前端,如果没有指定 MIME 类型,则使用默认的 application/octet-stream 类型。

前端接收到的响应内容是二进制数据,该数据不能像文本数据一样,在浏览器开发工具中直接查看。

可以将流数据保存到 Blob 对象中:

const blob = new Blob(someStreamData)
// 可以指定数据类型
const blob = new Blob(someStreamData, { type: "application/pdf" })

Blob 对象可以导出到客户端本地:

const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = filename;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
0

评论区