2017-04-17 69 views
-2

我是Golang的新手,所以也許這是非常明顯的事情,但是我沒有發現任何在Stackoverflow或Gzip文檔上工作的東西。無效的GZIP標頭

我通過Http下載了一個.gz文件,並將響應主體的內容寫入文件中。但是,當我嘗試從文件中讀取並解壓縮時,出現「無效標題」錯誤。

這裏是我的代碼:

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 

我以爲這將是我收到的內容是無效的,但我想通過「焦油-xjf file.gz」解壓縮它,它perfecly工作。

任何想法?

+6

如果使用'-j'的tar工作,它是一個bzip文件,而不是gzip。 – JimB

回答

0

你需要的zlib而不是gzip的:

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) 
} 
相關問題