Zipando conteúdo dentro de uma pasta sem a pasta raiz
O requisito é criar um arquivo ZIP contendo os arquivos dentro de um diretório, excluindo o próprio diretório como a pasta raiz na extração.
O snippet fornecido tenta fazer isso definindo o nome do cabeçalho usando a seguinte linha:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
No entanto, este código adiciona o diretório base (por exemplo, "dir1") ao nome do cabeçalho, resultando em um arquivo onde os arquivos são aninhados dentro da estrutura de diretórios.
Para resolver esse problema, a linha deve ser substituída pelo seguinte:
header.Name = strings.TrimPrefix(path, source)
Isso remove o diretório base do nome do cabeçalho, garantindo que os arquivos sejam extraídos sem a estrutura de diretórios.
O código modificado ficaria assim:
import ( "archive/zip" "fmt" "io" "os" "path/filepath" ) func Zipit(source, target string) error { zipfile, err := os.Create(target) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() info, err := os.Stat(source) if err != nil { return nil } filepath.Walk(source, func(path string, info os.FileInfo, err error) error { if err != nil { return err } header, err := zip.FileInfoHeader(info) if err != nil { return err } if info.IsDir() { header.Name = "/" } else { header.Method = zip.Deflate } writer, err := archive.CreateHeader(header) if err != nil { return err } if info.IsDir() { return nil } file, err := os.Open(path) if err != nil { return err } defer file.Close() _, err = io.Copy(writer, file) return err }) return err } func main() { err := Zipit("path/dir1" "/", "test" ".zip") if err != nil { fmt.Println(err) } }
Este código compacta efetivamente o conteúdo dentro do diretório "dir1" sem incluir o próprio diretório no arquivo ZIP.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3