2013-06-05 19 views
5

httpサービスからデータを取得していますが、のフライでを解凍します。ここ は私の現在のアプローチです: io.ReadCloserを解凍する方法は?

resp, err := http.Get(url) 
if err != nil { 
    logger.Fatalf("Can't fatch %s data. %v", url, err) 
} 
logger.Info("Fetched data from %s", url) 
content_zipped, err := ioutil.ReadAll(resp.Body) 
resp.Body.Close() 
if err != nil { 
    logger.Fatal(err) 
} 
zip_reader, err := zip.NewReader(bytes.NewReader(content_zipped), int64(len(content_zipped))) 

は、一度にすべてのコンテンツ(6行)を読まずresp.Bodyを解凍する方法はありますか?私はのストリームバイトを意味します。

答えて

9

ジップアーカイブは読み取りにランダムアクセスが必要なため、バイトをストリームするのは難しいです。特に、zip.Reader.initのソースはhttp://golang.org/src/pkg/archive/zip/reader.go?s=1265:1323#L59を参照してください。 最初に行うことは、ファイルの末尾付近から読み取るreadDirectoryEndを呼び出すことです。

異なる圧縮方法(gzipなど)を使用できますか?その後、gzip.NewReader(resp.Body)を使用してデータをストリーミングできます。

+0

サービスからのデータはzipファイルです。 –

関連する問題