From 6abd313bd2327c40a7a323898bc4f65378568aef Mon Sep 17 00:00:00 2001 From: zhengkunwang223 <31820853+zhengkunwang223@users.noreply.github.com> Date: Thu, 1 Jun 2023 13:51:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E8=A7=A3=E5=8E=8B=20G?= =?UTF-8?q?BK=20=E6=A0=BC=E5=BC=8F=E7=9A=84=20zip=20=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E4=B9=B1=E7=A0=81=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#1214)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs https://github.com/1Panel-dev/1Panel/issues/1209 --- backend/utils/files/file_op.go | 25 ++++++++++++++++++++++++- cmd/server/app/logo.png | Bin 6787 -> 9330 bytes go.mod | 9 +++++++-- go.sum | 15 +++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/backend/utils/files/file_op.go b/backend/utils/files/file_op.go index c8c920f88..56bb7cb7e 100644 --- a/backend/utils/files/file_op.go +++ b/backend/utils/files/file_op.go @@ -7,6 +7,9 @@ import ( "encoding/json" "fmt" "github.com/1Panel-dev/1Panel/backend/utils/cmd" + cZip "github.com/klauspost/compress/zip" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/transform" "io" "io/fs" "net/http" @@ -417,6 +420,7 @@ const ( ) func getFormat(cType CompressType) archiver.CompressedArchive { + format := archiver.CompressedArchive{} switch cType { case Tar: @@ -481,6 +485,15 @@ func isIgnoreFile(name string) bool { return strings.HasPrefix(name, "__MACOSX") || strings.HasSuffix(name, ".DS_Store") || strings.HasPrefix(name, "._") } +func decodeGBK(input string) (string, error) { + decoder := simplifiedchinese.GBK.NewDecoder() + decoded, _, err := transform.String(decoder, input) + if err != nil { + return "", err + } + return decoded, nil +} + func (f FileOp) Decompress(srcFile string, dst string, cType CompressType) error { format := getFormat(cType) @@ -489,7 +502,17 @@ func (f FileOp) Decompress(srcFile string, dst string, cType CompressType) error if isIgnoreFile(archFile.Name()) { return nil } - filePath := filepath.Join(dst, archFile.NameInArchive) + fileName := archFile.NameInArchive + var err error + if header, ok := archFile.Header.(cZip.FileHeader); ok { + if header.NonUTF8 && header.Flags == 0 { + fileName, err = decodeGBK(fileName) + if err != nil { + return err + } + } + } + filePath := filepath.Join(dst, fileName) if archFile.FileInfo.IsDir() { if err := f.Fs.MkdirAll(filePath, info.Mode()); err != nil { return err diff --git a/cmd/server/app/logo.png b/cmd/server/app/logo.png index ffc2c831b5838c7cb3ec600d9d99a7686341b053..6f82a12d56b666914ee686321551411e970d4db5 100644 GIT binary patch literal 9330 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