问题描述
下面的代码尝试下载并解压缩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 (将#修改为@)