使用dart下载文件

时间:2013-08-03 13:04:20

标签: dart

我们可以使用dart下载文件吗?

例如在python

4 个答案:

答案 0 :(得分:13)

我经常使用HTTP包。如果要下载不大的文件,可以使用HTTP包进行更简洁的方法:

import 'package:http/http.dart' as http;

main() {
  http.get(url).then((response) {
    new File(path).writeAsBytes(response.bodyBytes);
  });
}

亚历山大写的内容对大文件的效果会更好。如果您发现需要经常下载文件,请考虑为此编写辅助函数。

答案 1 :(得分:11)

Shailen's response是正确的,Stream.pipe可以缩短一点。

import 'dart:io';

main() {
  new HttpClient().getUrl(Uri.parse('http://example.com'))
    .then((HttpClientRequest request) => request.close())
    .then((HttpClientResponse response) => 
        response.pipe(new File('foo.txt').openWrite()));
}

答案 2 :(得分:2)

在问题中链接的python示例涉及请求example.com的内容并将响应写入文件。

以下是您在Dart中执行类似操作的方法:

import 'dart:io';

main() {
  var url = Uri.parse('http://example.com');
  var httpClient = new HttpClient();
  httpClient.getUrl(url)
    .then((HttpClientRequest request) {
      return request.close();
    })
    .then((HttpClientResponse response) {
      response.transform(new StringDecoder()).toList().then((data) {
        var body = data.join('');
        print(body);
        var file = new File('foo.txt');
        file.writeAsString(body).then((_) {
          httpClient.close();
        });
      });
    });
}

答案 3 :(得分:0)

我们可以使用http.readBytes(url)。

await File(path).writeAsBytes(await http.readBytes('https://picsum.photos/200/300/?random'));