Flutter:如何获取http请求的上传/下载进度
我正在编写一个将图像上传到服务器的应用程序,并且我不希望仅显示微调框,而是希望能够获得该上传状态的进度。
另外,我想这样做而不使用Multipart表单数据。这是我当前正在使用的代码-但它似乎因管道断开而停滞了,对于是否将数据发送到服务器,我的反馈为零:
Future<String> _uploadFile(File assetFile) async { final url = <removed>;
final stream = await assetFile.openRead();
int length = assetFile.lengthSync();
final client = new HttpClient();
final request = await client.postUrl(Uri.parse(url));
request.headers.add(HttpHeaders.CONTENT_TYPE, "application/octet-stream");
request.contentLength = length;
await request.addStream(stream);
final response = await request.close();
// response prociessing.
}
是否可以将大数据作为流发送而无需将其读入内存,并且可以使用当前的dart / flutter API在上传中取得进展吗?
回答:
您已经在使用的Stream
方式意味着您没有将整个文件读入内存。它可能以64k块的形式读取。
您可以使用StreamTransformer拦截生产者(文件)和消费者(HttpClient)之间的流,如下所示:
int byteCount = 0; Stream<List<int>> stream2 = stream.transform(
new StreamTransformer.fromHandlers(
handleData: (data, sink) {
byteCount += data.length;
print(byteCount);
sink.add(data);
},
handleError: (error, stack, sink) {},
handleDone: (sink) {
sink.close();
},
),
);
....
await request.addStream(stream2);
您应该看到byteCount
以64k块递增。
以上是 Flutter:如何获取http请求的上传/下载进度 的全部内容, 来源链接: utcz.com/qa/430397.html