2017-04-17 1 views
-2

私はGolangを新しくしています。多分これはかなり明白ですが、私はStackoverflowやGzipドキュメントで作業しているものは見つかりませんでした。無効なGZIPヘッダー

私は.gzをHttp経由でダウンロードし、応答本体の内容をファイルに書き込みます。しかし、ファイルから読み込み、解凍しようとすると、「無効なヘッダ」というエラーが出ます。それは私が受け取る内容が無効であるということでしょうが、私は「タール-xjf file.gz」を介して、それを解凍しようとしましたが、それはperfecly働いていたものの

reader, err := os.Open(completeName) 
if err != nil { 
    panic(err) 
} 
defer reader.Close() 

archive, err := gzip.NewReader(reader) 
if err != nil { 
    panic(err) 
} 
defer archive.Close() 

target := destDirectory() 
writer, err := os.Create(target + completeName) 
if err != nil { 
    panic(err) 
} 
defer writer.Close() 

_, err = io.Copy(writer, archive) 
return err 

I:

は、ここに私のコードです。

アイデア?

+6

'-j'でtarが動作する場合、gzipではなくbzipファイルです。 – JimB

答えて

0

するのではなく、GZIPよりzlibの必要があります。サーバーで

func readGzip(content []byte) error { 
    var buf *bytes.Buffer = bytes.NewBuffer(content) 

    gRead, err := zlib.NewReader(buf) 
    if err != nil { 
     return err 
    } 

    if t, err := io.Copy(os.Stdout, gRead); err != nil { 
     fmt.Println(t) 
     return err 
    } 

    if err := gRead.Close(); err != nil { 
     return err 
    } 
    return nil 
} 
+0

ありがとう、私は明日それを試します:) –

0

:コード下の使用は、応答を送信した場合、レスポンスボディは、ヘッダー情報が含まれます。無効なヘッダーエラーが発生します。

ServeContent()を使用してファイルを送信する必要があります。

streamPDFbytes, _ := os.Create("./data/Matt Aimonettirepo.go") 
b := bytes.NewBuffer(streamPDFbytes) 

// stream straight to client(browser) 
w.Header().Set("Content-type", "application/octet-stream") 
w.Header().Set("Content-Encoding", "gzip") 

if _, err := b.WriteTo(w); err != nil { // <----- here! 
    fmt.Fprintf(w, "%s", err) 
} 
関連する問題