是否可以动态生成大文件(10Gb)并将它们流式传输到客户端?

时间:2016-11-18 00:32:05

标签: javascript html html5 google-chrome dart

是否可以动态生成大文件(10Gb +)供客户端下载?

我正在构建一个动态创建文件并将其下载到客户端的webapp。我已经通过创建一个Blob数据并使用objectUrl来下载它们来实现这一点。

(例如:Download large files in Dartlang):

import 'dart:html';

void main() {
  var data = new Blob(['Hello World!\n'*1000000]);
  querySelector("#downloadLink")
      ..setAttribute('href', Url.createObjectUrl(data));
}

但是,这对大文件不起作用。 有没有办法将文件传输到客户端,或将数据附加到文件,以便文件可以逐个生成而不是在下载之前生成整个文件?

1 个答案:

答案 0 :(得分:2)

for< 800MB我会推荐FileSaver但是对于10GB +你需要StreamSaver之类的东西(它只适用于Blink doe)16GB +避风港对我来说有任何问题

const fileStream = streamSaver.createWriteStream('filename.txt')
const writer = fileStream.getWriter()
const encoder = new TextEncoder()

// When you have any data you write it as Uint8array
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")

writer.write(uint8array) // chunk
writer.write(uint8array) // chunk
writer.write(uint8array) // chunk
writer.write(uint8array) // chunk

// After you have written all bytes you need to close it
writer.close()

(只是不要一次写下所有的块,随着你获得更多的数据,逐步进行)