在客户端生成可下载的文件流

问题描述

我使用 GWT,但这可能通常适用于 JavaScript。

我从服务器下载了低个位数兆字节的原始数据。我想从原始数据生成一个可下载的 CSV 文件,但我想在客户端进行,因为与原始数据相比,CSV 会很大,并且通过网络传输所有这些都是愚蠢的。

一次生成整个文件内容,然后然后提示用户下载似乎是可能的,但是将数兆字节的字符串连接成一个 URL 是愚蠢的。

在任何理智的语言中,我都会从响应流读取到缓冲区,处理该缓冲区,生成一大块 CSV 文本并将其写入文件流。重复直到处理完所有原始数据。

这样的事情在 JavaScript 中可行吗?
GWT 对此有预定义的机制吗?

理想情况下,还应该有一种显示进度的方式。

解决方法

您可以使用浏览器的 Fetch API。

当您调用 fetch 时,它将返回一个 Response 对象。

Response.body getter 返回一个 ReadableStream 对象,它是您想要的响应流。

可以使用 GWT elemental2 库在 GWT 中访问浏览器 API。