go - 使用golang解压密码zip

标签 go unzip zip

我正在尝试用 golang 解压缩一个 zip 文件(使用密码)。

    r, err := zip.OpenReader("./path/to/the.zip")
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    for _, f := range r.File {
        if f.IsEncrypted() {
            f.SetPassword("$83?Lu{5nKbXxncjdH/_B)+}C`")
        }
        r, err := f.Open()
        if err != nil {
            log.Fatal(err)
        }

        buf, err := ioutil.ReadAll(r)
        if err != nil {
            log.Fatal(err)
        }
        defer r.Close()

        fmt.Printf("Size of %v: %v byte(s)\n", f.Name, len(buf))
    }

我现在正在使用存储库 https://github.com/yeka/zip我得到以下输出:

Size of cmxxxgapi/: 0 byte(s)
Size of cmxpi/vxxxxxxxx.yml: 326 byte(s)
Size of cmxxxpi/valxxxxxxe.yml: 379 byte(s)
Size of validations_javxxxo_mxxxxxxxon.yml: 722 byte(s)
Size of validations_xxx_mxxxxxxxxo.yml: 4322 byte(s)
Size of validations_xxxxse.yml: 65 byte(s)

我怎样才能解压缩所有这些文件并让它们从我的二进制文件中访问。

非常感谢。

附言。我不能使用 exec。

最佳答案

我终于设法解压了 zip 的内容。我没有正确获取所有文件,因为它没有直接区分文件路径。

我是通过以下方式解决的:

r, err := zip.OpenReader("./path/to/the.zip")
if err != nil {
    log.Fatal(err)
}
defer r.Close()

for _, f := range r.File {
    if f.IsEncrypted() {
        f.SetPassword("$83?ksdfkjsdKJHJKjdH/_B)+}C`")
    }
    r, err := f.Open()
    if err != nil {
        log.Fatal(err)
    }

    buf, err := ioutil.ReadAll(r)
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    if f.FileInfo().IsDir() {
        // Make Folder
        os.MkdirAll(fpath, os.ModePerm)
    } else {
        ioutil.WriteFile("./sentinel/validations/"+f.Name, buf ,os.ModePerm)
    }
}

关于go - 使用golang解压密码zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52700695/

相关文章:

google-apps-script - Google Script - 如何使用 unzip

r - 如何下载和/或提取 R 中响应对象内的 'raw' 二进制 zip 对象中存储的数据?

http - 如何在 go 中以流的形式上传文件?

php - 使用 PHP 解压缩较大的文件

javascript - 如何从 Node 中的客户端提取zip

python-2.7 - 你能在 python 2 中为 zip() 函数动态创建参数吗?

ios - 如何在 iOS Swift 中从本地目录加载index.html 文件?

go - 如何在Go应用程序内的Elasticsearch中执行嵌套聚合?

loops - 循环中的 slice 似乎保留了先前/最后的引用(取决于 slice 的长度)

git - 符号链接(symbolic link)到 GOPATH 文件夹是常见的做法吗?