如何解决无法在tar.gz中正确解压缩二进制文件
下面的代码尝试下载并解压缩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文件中正常解压缩文件效果很好,并且将解压缩后的文件识别为二进制文件。我已经检查了文件大小,该文件大小与预期的二进制文件相同。 )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。