【发布时间】:2016-10-14 13:19:02
【问题描述】:
我正在尝试使用 compress/gzip 读取 gzip 文件。我正在使用 http.DetectContentType,因为我不知道我得到的是普通的 txt 文件还是 gzip 文件。我的代码非常简单,如下所示:
f, err := os.Open(fullpath)
if err != nil {
log.Panicf("Can not open file %s: %v", fullpath, err)
return ""
}
defer f.Close()
buff := make([]byte, 512)
_, err = f.Read(buff)
if err != nil && err != io.EOF{
log.Panicf("Cannot read buffer %v", err);
return ""
}
switch filetype := http.DetectContentType(buff); filetype {
case "application/x-gzip":
log.Println("File Type is", filetype)
reader, err := gzip.NewReader(f)
if err != nil && err != io.EOF{
log.Panicf("Cannot read gzip archive %v", err);
return ""
}
defer reader.Close()
target := "/xx/yy/abcd.txt"
writer, err := os.Create(target)
if err != nil {
log.Panicf("Cannot write unarchived file %v", err);
return ""
}
defer writer.Close()
_, err = io.Copy(writer, reader)
return target
问题是 gzip 阅读器总是出错说“无法读取 gzip 存档 gzip:无效标头” 我也尝试过 zlib 库,但徒劳无功。我使用命令行 gzip 工具在 mac 中压缩了源文件。 请告诉我哪里出错了。
【问题讨论】: