无法在tar.gz中正确解压缩二进制文件

时间:2020-08-20 20:49:37

标签: go gzip tar

下面的代码尝试下载并解压缩tar.gz文件,然后在其中压缩二进制文件。解压缩似乎出错了,因为完成解压缩并且文件已存在之后,系统(Mac OS X)无法将该文件识别为二进制可执行文件。如果有人能帮助我确定这里出了什么问题,我将非常感谢。 这是代码

        resp, err := svc.GetObject(&s3.GetObjectInput{
            Bucket: aws.String(S3Bucket),
            Key: aws.String(s3Key),
        })
        if err != nil { return err }
        defer resp.Body.Close()
        ExtractTarGz(resp.Body)
func ExtractTarGz(gzipStream io.Reader) {
    uncompressedStream, err := gzip.NewReader(gzipStream)
    if err != nil {
        log.Fatal("ExtractTarGz: NewReader failed")
    }
    tarReader := tar.NewReader(uncompressedStream)
    for true {
        header, err := tarReader.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error())
        }

        switch header.Typeflag {
        case tar.TypeDir:
            if err := os.Mkdir(header.Name, 0755); err != nil {
                log.Fatalf("ExtractTarGz: Mkdir() failed: %s", err.Error())
            }
        case tar.TypeReg:
            outFile, err := os.Create(header.Name)
            if err != nil {
                log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error())
            }
            if _, err := io.Copy(outFile, tarReader); err != nil {
                log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error())
            }
            outFile.Close()

        default:
            log.Fatalf(
                "ExtractTarGz: uknown type: %s in %s",
                header.Typeflag,
                header.Name)
        }

    }
}

(使用Mac的Keka,从tar文件中正常解压缩文件效果很好,并且将解压缩后的文件识别为二进制文件。我已经检查了文件大小,该文件大小与预期的二进制文件相同。 )

0 个答案:

没有答案