2013-08-03 46 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

Dart API不能更短嗎? 'new new HttpClient()'=>'getUrl()'=>'close()'=>''close()''new StringDecoder()'=>'這是沒有考慮到4次調用'然後()'。 – mezoni

+0

請注意,在最近版本的Dart中,'StringDecoder'類已被'UTF8.decoder'取代。 – lucperkins

8

我使用HTTP包很多。如果你想下載一個文件,是不是很大,你可以使用HTTP包一個更簡潔的方法:

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

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

什麼亞歷山大寫道:將較大文件有更好的表現。如果您經常需要下載文件,請考慮編寫一個輔助函數。