![](/img/trans.png)
[英]Flutter how to download a file using flutter_downloader package
[英]How to adjust download buffer size on flutter http, dio or flutter_downloader?
您可以使用ChunkedStreamReader使用自定义 chunkSize(例如 64KB)处理响应流并将其写入文件。 另请参阅此 GitHub 问题。
在下面的示例中,它将以流的形式侦听响应,然后从 ChunkedStreamReader 读取具有所需块大小(64*1024 = 64KB)的字节,并将获取的块写入文件。
// Download file
try {
int offset = 0;
var httpClient = http.Client();
var request = http.Request('GET', Uri.parse(url));
var response = httpClient.send(request);
// Open file
File file = File('$downloadPath.tmp');
response.asStream().listen((http.StreamedResponse r) async {
final reader = ChunkedStreamReader(r.stream);
try {
// Set buffer size to 64KB
int chunkSize = 64 * 1024;
Uint8List buffer;
do {
buffer = await reader.readBytes(chunkSize);
// Add buffer to chunks list
offset += buffer.length;
print('Downloading $filename ${downloaded ~/ 1024 ~/ 1024}MB');
// Write buffer to disk
await file.writeAsBytes(buffer, mode: FileMode.append);
} while (buffer.length == chunkSize);
// Rename file from .tmp to non-tmp extension
await file.rename(downloadPath);
print('Downloaded $filename');
} catch (e) {
print(e);
} finally {
reader.cancel();
}
}).onDone(() async {
// do something when finished
});
} catch (error) {
print('Error downloading: $error');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.