是否可以动态生成大文件(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));
}
但是,这对大文件不起作用。 有没有办法将文件传输到客户端,或将数据附加到文件,以便文件可以逐个生成而不是在下载之前生成整个文件?
答案 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()
(只是不要一次写下所有的块,随着你获得更多的数据,逐步进行)