首页 > 解决方案 > 是在现代浏览器(如 Edge)上使用 Javascript 或 Typescript 仅作为 Blob 以异步模式下载的二进制文件

问题描述

我以前从未使用过 JavaScript。所以如果我的问题很幼稚,请原谅我的问题。

我正在阅读以下W3.org页面。在那里,他们说应该以 blob 和异步模式下载二进制文件。我试图找到其他文件,但无法提交明确的解释。

文件或 Blob 读取应在主线程上异步发生,并在线程 Web 应用程序中使用可选的同步 API。用于读取文件的异步 API 可防止用户代理主线程上的阻塞和 UI “冻结”。

问题

标签: javascripttypescript

解决方案


我假设您的问题是关于务实地阅读网络资源,即XMLHttpRequestfetchAPI,而不是关于浏览器的文件下载能力(这不是编程问题)。

您引用的 File API 可以与这两个一起使用,但也可以单独使用来读取本地文件。事实上,很少将 File API 用于网络请求。

是不是意味着一个二进制文件只能在异步模式下下载

是的。由于 Firefox 30、Chrome 39、Edge 13 和其他浏览器在那个时期附近发布,所有网络请求必须是异步的。原因是JavaScript只有一个线程,同步等待一个文件下载会完全冻结网页。

之前的浏览器可以使用XMLHttpRequest.open(){ async: false } API 中的选项来发送同步请求。

这是否意味着二进制文件只能作为 Blob 下载

不。互联网上的一切都是以二进制格式传输的,如果您认为您的数据可以解释为文本,浏览器还提供API可以轻松地在表示(文本、JSON 等)之间进行转换。

像许多其他编程语言一样,您也可以编写自己的逻辑(例如protobuf.js)来将二进制数据解析为您想要的表示形式。

这也适用于旧浏览器吗?在 IE 上意味着我们可以将二进制文件下载为文本文件,例如 JSON 数据结构。

实际上,在添加 HTML5 ArrayBuffer/Blob/File API 之前,您只能获取文本格式的响应。但是,仍然可以将 text 转换回 binary

为什么我们不能将它们下载到像 JSON 结构这样的文本文件中。

如上所述,您可以。

它传输的字符串大小是否有大小限制?

唯一的限制是设备内存或存储。


推荐阅读