13

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

例如在python中

4

5 回答 5

26

我经常使用HTTP包。如果你想下载一个不大的文件,你可以使用 HTTP 包来获得更简洁的方法:

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

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

Alexandre 所写的内容对于较大的文件会表现得更好。如果您发现需要经常下载文件,请考虑为此编写一个辅助函数。

于 2013-08-05T18:02:41.900 回答
18

Shailen 的回答是正确的,甚至可以使用Stream.pipe更短一些。

import 'dart:io';

main() async {
  final request = await HttpClient().getUrl(Uri.parse('http://example.com'));
  final response = await request.close();
  response.pipe(File('foo.txt').openWrite());
}
于 2013-08-04T14:45:24.677 回答
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();
        });
      });
    });
}
于 2013-08-03T14:20:59.713 回答
2

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

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

于 2018-08-20T19:42:22.387 回答
0

是的,首先您必须使用 http dart 库请求文件 url,例如:

响应 response = await get(Uri.parse(link));

之后,您的响应对象(响应)将在 self 中获取该文件,您可以简单地将响应字节写入文件,该文件将成为您下载的文件。当我像这样打开文件时:

文件文件 = File('image.jpg')

然后我们必须像这样向这个文件发送响应字节:

file.writeAsBytes(response.bodyBytes);

现在您已成功下载图像文件.. 恭喜。

另外,例如,让我向您展示一个下载图像文件的示例代码:

import 'dart:io';
import 'package:http/http.dart';
main(List<String> args) async {
var link =
  "https://pps.whatsapp.net/v/t61.24694- 
24/72779382_449683642563635_3243701117464346624_n.jpg?ccb=11- 
4&oh=23e3bc2ce3f4940a70cb464494bbda76&oe=619B3B8C";

Response response = await get(Uri.parse(link));
File file = File('image.jpg');
file.writeAsBytes(response.bodyBytes);
}

看,这是代码,在终端视图的底部下载了一个名为 image.jpg 的文件是我们下载的图像。

截屏

这是我们下载的实际图像。

下载的图像

于 2021-11-18T08:48:48.607 回答