diff --git a/fss/core/sendzip.go b/fss/core/sendzip.go
index 31e7a56..8219891 100644
--- a/fss/core/sendzip.go
+++ b/fss/core/sendzip.go
@@ -16,7 +16,7 @@ func SendZip(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
// 选择文件,并生成zip包
// 文件
- zipfarr := r.Form["zipfiles"]
+ zipfarr := r.Form["sfiles"]
// 服务器ip地址
serip := r.Form["serverip"]
@@ -50,7 +50,7 @@ func SendZip(w http.ResponseWriter, r *http.Request) {
// 当前运行的目录
// ZIP 文件的实际路径
- ziprl := path.Join("./files/", zpFileName)
+ ziprl := path.Join("./sync_zips/", zpFileName)
// zip 创建成功后
rest := <-taskId
@@ -64,7 +64,7 @@ func SendZip(w http.ResponseWriter, r *http.Request) {
fmt.Println("archive is not exist!!!")
}
// 执行完 跳转到 首页
- http.Redirect(w, r, "/console", http.StatusFound)
+ http.Redirect(w, r, "/", http.StatusFound)
}
// udp 模式发送文件
diff --git a/fss/fsw/index.html b/fss/fsw/index.html
index 4fb37ea..0edd09f 100644
--- a/fss/fsw/index.html
+++ b/fss/fsw/index.html
@@ -304,6 +304,8 @@
html += "";
})
// append to html
+ html += "";
+ html += "";
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")
diff --git a/fss/util/fsutil.go b/fss/util/fsutil.go
index 1e42b3b..73aaf6f 100644
--- a/fss/util/fsutil.go
+++ b/fss/util/fsutil.go
@@ -305,3 +305,87 @@ func DecompressZip(zpFname string) error {
}
return nil
}
+
+// dest:目的地址以及压缩文件名 eg:/data/logZip/2022-12-12-log.zip
+// paths:需要压缩的所有文件所组成的集合
+func CompressToZip(dest string, currentPath string, paths []string) error {
+ // fmt.Println("real path", currentPath)
+ // 打开files 目录
+ filesPath := ""
+ if dir, err := os.Getwd(); err == nil {
+ filesPath = dir + "/files/"
+ }
+ if err := os.MkdirAll(filesPath, 0755); err != nil {
+ fmt.Println(err.Error())
+ }
+ // ToSlash 过滤windows的斜杠引起的bug
+ zfile, err := os.Create(path.Join("./files", "/", dest))
+ if err != nil {
+ return err
+ }
+ defer zfile.Close()
+ zipWriter := zip.NewWriter(zfile)
+ defer zipWriter.Close()
+
+ // 遍历带压缩的目录信息
+ for _, src := range paths {
+ // 替换文件名,并且去除前后 "\" 或 "/"
+ // path = strings.Trim(path, string(filepath.Separator))
+ // 从配置中读取到源目录
+ src = path.Join(currentPath, "/", src)
+ // 删除尾随路径(如果它是目录)
+ src := strings.TrimSuffix(src, string(os.PathSeparator))
+ // 文件遍历
+ err = filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ // 创建本地文件头
+ header, err := zip.FileInfoHeader(info)
+ if err != nil {
+ return err
+ }
+
+ // 监听的工作目录作为文件的结尾,然后取相对路径
+ // 在zip存档中设置文件的相对路径
+ header.Name, err = filepath.Rel(filepath.Dir(config.G.FilePath), path)
+ if err != nil {
+ return err
+ }
+
+ // 转换为Unix风格的路径分隔符
+ header.Name = filepath.ToSlash(header.Name)
+
+ // 目录需要拼上一个 "/" ,否则会出现一个和目录一样的文件在压缩包中
+ if info.IsDir() {
+ header.Name += "/"
+ } else {
+ // 将压缩方法设置为deflate
+ header.Method = zip.Deflate
+ }
+ // fmt.Printf("zip header:%v\n", header.Name)
+ // 创建写入头的writer
+ headerWriter, err := zipWriter.CreateHeader(header)
+ if err != nil {
+ return err
+ }
+ if info.IsDir() {
+ return nil
+ }
+ f, err := os.Open(path)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ _, err = io.Copy(headerWriter, f)
+ return err
+ })
+
+ if err != nil {
+ return err
+ }
+ }
+ // 存到指定位置
+ os.Rename(dest, path.Join("./sync_zips/", dest))
+ return nil
+}