【发布时间】:2013-08-03 13:04:19
【问题描述】:
我们可以使用dart 下载文件吗?
例如python
【问题讨论】:
标签: dart
我们可以使用dart 下载文件吗?
例如python
【问题讨论】:
标签: dart
Shailen's response 是正确的,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());
}
【讨论】:
我经常使用HTTP 包。如果你想下载一个不大的文件,你可以使用 HTTP 包来获得更简洁的方法:
import 'package:http/http.dart' as http;
main() {
http.get(url).then((response) {
new File(path).writeAsBytes(response.bodyBytes);
});
}
Alexandre 所写的内容对于较大的文件会表现得更好。如果您发现需要经常下载文件,请考虑为此编写一个辅助函数。
【讨论】:
.then。不过,如果你使用 await 会更干净。
我们可以使用 http.readBytes(url)。
await File(path).writeAsBytes(await http.readBytes('https://picsum.photos/200/300/?random'));
【讨论】:
问题中链接到的 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();
});
});
});
}
【讨论】:
new HttpClient() => getUrl() => close() => transform() => new StringDecoder() => toList() => close()。这还没有考虑到then() 的 4 个调用。
StringDecoder 类已被 UTF8.decoder 取代。
是的,首先您必须使用 http dart 库请求文件 url,例如:
响应响应 = await get(Uri.parse(link));
之后,您的 Response 对象(响应)将在 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 的文件是我们下载的图像。
这是我们下载的实际图片。
【讨论】: