下载数据并将其保存在本地

时间:2018-07-04 05:41:24

标签: dart flutter

我在将文件从可下载链接保存到手机的本地存储时遇到问题。我的计划是创建一个Button,该文件将下载a file

然后,我想保存到手机的内部存储 ,以便可以访问通过电话的文件存储系统 。我尝试使用SharedPreferences来实现它,但这并不是我真正想要的。有人可以启发我如何执行此功能吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用软件包dio进行文件下载:

import 'package:dio/dio.dart'; 

Dio dio = new Dio(); 
Response response = 
    await dio.get("https://venturebeat.com/wp-content/uploads/2018/02/google-flutter-logo.png?fit=578%2C289&strip=all"); 
print(response.data);

或使用Flutters HttpClient

new HttpClient().get('https://venturebeat.com/wp-content/uploads/2018/02/google-flutter-logo.png?fit=578%2C289&strip=all', 80, saveLocation)
.then((HttpClientRequest request) => request.close())
.then((HttpClientResponse response) { 
response.transform(utf8.decoder)
.listen((contents) { 
// Do something with your data 
});
});

要获取要保存文件的路径,请检查this。而且,如果您要保存使用SharedPreferences下载文件的网址,请查看此link并在设备上创建一个StringList,每个网址中都有一个网址。

答案 1 :(得分:0)

无需使用SharedPreferences,因为它是键/值数据库。在您的情况下,您尝试将文件写入磁盘,因此需要一些库:

  • HTTP client,以便您可以提出网络请求
  • dart:io库,以便您可以将文件写入磁盘
  • path_provider插件可在文件系统上查找位置
  • dart:async,以便您的用户界面在下载文件时不会冻结

这是最简洁的代码:

static var httpClient = new HttpClient();
Future<File> _downloadFile(String url, String filename) async {
  var request = await httpClient.getUrl(Uri.parse(url));
  var response = await request.close();
  var bytes = await consolidateHttpClientResponseBytes(response);
  String dir = (await getApplicationDocumentsDirectory()).path;
  File file = new File('$dir/$filename');
  await file.writeAsBytes(bytes);
  return file;
}