我在将文件从可下载链接保存到手机的本地存储时遇到问题。我的计划是创建一个Button
,该文件将下载a file。
然后,我想保存到手机的内部存储 ,以便可以访问通过电话的文件存储系统 。我尝试使用SharedPreferences
来实现它,但这并不是我真正想要的。有人可以启发我如何执行此功能吗?
非常感谢。
答案 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,因为它是键/值数据库。在您的情况下,您尝试将文件写入磁盘,因此需要一些库:
这是最简洁的代码:
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;
}