2017-04-17 43 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) 
} 
相关问题