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

回到顶部