Flutter Dio download 时 total =-1

5 min read

如果 total = -1,通常是因为服务器不支持「Content-Length」标头的原因。

可以试试通过在 Dio 的 HttpOptions 配置中设置 receiveDataWhenStatusErrortrue,以便在状态代码不是 200 时仍然能够接收到数据。

dio.options.receiveDataWhenStatusError = true;

此外,也可以通过手动读取流的方式实现下载,以在状态代码不是 200 时仍然能够接收到数据:

Response response = await dio.get("https://yourapi.com/file.flv",
    options: Options(responseType: ResponseType.stream));
var data = await response.data.stream.toBytes();
print(data);