如何访问嵌套存档?

How can I access nested archives?

我有客户端和服务器。 客户端将存档 (zip) 作为 []byte 发送到服务器。 现在服务器读取它们并打印所有内容文件名:

r, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
if err != nil {
    fmt.Println(err)
}



for _, zipFile := range r.File {

    if strings.Contains(zipFile.Name, ".tar") {
            fmt.Println(zipFile.Name)

    }

}

问题是存档有嵌套的存档(tar),里面有 xml 个文件,所以这些名称是存档的名称。 我如何访问嵌套的存档内容(以便我可以使用 xml 文件)?

您只需继续前进并访问 tar:

        if strings.Contains(zipFile.Name, ".tar") {
            fmt.Println(zipFile.Name)
            rz, err := zipFile.Open()
            if err != nil {
                fmt.Println(err)
            }
            tr := tar.NewReader(rz)

            for {
                hdr, err := tr.Next()
                if err == io.EOF {
                    break // End of archive
                }
                if err != nil {
                    log.Fatal(err)
                }
                if strings.Contains(hdr.Name, ".xml") { 
                    fmt.Printf("Contents of %s:\n", hdr.Name)
                    /*if _, err := io.Copy(os.Stdout, tr); err != nil {
                        log.Fatal(err)
                    }
                    fmt.Println()
                    */
                } 
            }

        }

你可以看到documentation for the tar package。我使用了这个例子并对文件访问发表了评论,因为我不知道你想对文件做什么。