Browse Source

调整发送

master
453530270@qq.com 1 year ago
parent
commit
55c1d172ca
  1. 6
      fss/core/sendzip.go
  2. 2
      fss/fsw/index.html
  3. 84
      fss/util/fsutil.go

6
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 模式发送文件

2
fss/fsw/index.html

@ -304,6 +304,8 @@
html += "</li>";
})
// append to html
html += "<input type='hidden' name='curpath' value='"+upath+"'>";
html += "<input type='hidden' name='serverip' value='"+scip+"'>";
// $("#tgsc").html(html)
$(elemnt).html(html);
writelog(scip + "获取数据:" + res.data.list.length + "条数据")

84
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
}

Loading…
Cancel
Save