尝试在 golang 中读取 gzip 文件时出错
Error on trying to read gzip files in golang
我正在尝试使用 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 reader 总是出错 "Cannot read gzip archive gzip: invalid header" 我也尝试过 zlib 库,但没有成功。我使用命令行 gzip 工具将源文件 gzip 到 mac。
请告诉我哪里出错了。
您正在读取文件的前 512 个字节,因此 gzip.Reader
永远不会看到它。由于这些是常规文件,您可以在成功后返回开始 Read
:
f.Seek(0, os.SEEK_SET)
我正在尝试使用 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 reader 总是出错 "Cannot read gzip archive gzip: invalid header" 我也尝试过 zlib 库,但没有成功。我使用命令行 gzip 工具将源文件 gzip 到 mac。 请告诉我哪里出错了。
您正在读取文件的前 512 个字节,因此 gzip.Reader
永远不会看到它。由于这些是常规文件,您可以在成功后返回开始 Read
:
f.Seek(0, os.SEEK_SET)