javascript - 是在现代浏览器(如 Edge)上使用 Javascript 或 Typescript 仅作为 Blob 以异步模式下载的二进制文件
问题描述
我以前从未使用过 JavaScript。所以如果我的问题很幼稚,请原谅我的问题。
我正在阅读以下W3.org页面。在那里,他们说应该以 blob 和异步模式下载二进制文件。我试图找到其他文件,但无法提交明确的解释。
文件或 Blob 读取应在主线程上异步发生,并在线程 Web 应用程序中使用可选的同步 API。用于读取文件的异步 API 可防止用户代理主线程上的阻塞和 UI “冻结”。
问题
- 这是否意味着二进制文件只能以异步模式下载,并且只能在 Edge 和其他使用 JavaScript 以及 Typescript 的现代浏览器中作为 Blob 下载?
- 为什么我们不能将它们下载到像 JSON 结构这样的文本文件中。它传输的字符串大小是否有大小限制?
- 这也适用于旧浏览器吗?在 IE 上意味着我们可以将二进制文件下载为文本文件,例如 JSON 数据结构。
解决方案
我假设您的问题是关于务实地阅读网络资源,即XMLHttpRequest
和fetch
API,而不是关于浏览器的文件下载能力(这不是编程问题)。
您引用的 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 结构这样的文本文件中。
如上所述,您可以。
它传输的字符串大小是否有大小限制?
唯一的限制是设备内存或存储。
推荐阅读
- python-3.x - 如何通过文件上传创建龙卷风单元测试?
- angular - Angular - 当数据来自父级时不应用类
- c# - Xamarin - 创建模拟器设备时出现系统映像下载错误
- permissions - 让用户“GRANT SELECT”而不让他们成为管理员或授予他们控制权限
- sql - 用'+'分割字符串并搜索所有字符串是否存在于表中的一行中
- python - 在 Heroku 上部署 Django/VueJs 应用程序一直失败,并出现错误 main.js module not found
- sql - 这是 COALESCE 在此 MS SQL 查询中的工作方式: ORDER BY COALESCE([UpdatedOn], [CreatedOn]) DESC
- python - 如果小写元素在列表中而不将列表更改为小写
- prestashop - 如何在 prestashop 中获取当前状态为“已完成”的所有订单 ID?
- pip - 得到导入错误,DLL文件加载失败,有python3.7,安装了tensorflow和keras,仍然是同样的错误