2013-08-03 4 views

ответ

8

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

Питон пример связан в вопросе включает запрос на содержимое example.com и писать ответ в файл.

Вот как вы можете сделать что-то подобное в Дарта:

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(); 
     }); 
     }); 
    }); 
} 
+0

Хорошо, так что это возможно, но как насчет того, является ли контент образным? Спасибо. –

+0

Является ли API Dart не короче? 'new HttpClient()' => 'getUrl()' => 'close()' => 'transform()' => 'new StringDecoder()' => 'toList()' => 'close()'. И это не учитывает 4 вызова 'then()'. – mezoni

+0

Обратите внимание, что класс 'StringDecoder' был заменен на' UTF8.decoder' в последних версиях Dart. – lucperkins

8

Я пользуюсь пакетом HTTP. Если вы хотите скачать файл, не огромный, вы можете использовать пакет HTTP для более чистого подхода:

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

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

Что написал Александр будет работать лучше для больших файлов. Подумайте о том, чтобы написать вспомогательную функцию для этого, если вам часто приходится скачивать файлы.

Смежные вопросы