Browse Source

文件存在时备份zip

master
453530270@qq.com 2 years ago
parent
commit
b3a2206074
  1. BIN
      fsv2/fstc
  2. 21
      fsv2/handler/handler.go
  3. 81
      fsv2/util/nzip.go

BIN
fsv2/fstc

Binary file not shown.

21
fsv2/handler/handler.go

@ -112,11 +112,28 @@ func ReceiveHandler(w http.ResponseWriter, r *http.Request) {
}
// 检查文件是否存在
if util.IsFileExist(nfname) {
// 当前时间
curtime := time.Now().Format("2006/01/02")
// 创建备份文件夹
bkdir := filepath.Join(config.G.FilePath, "backup", curtime)
// 递归创建文件夹
serr := os.MkdirAll(bkdir, os.ModePerm)
// 创建错误 返回空
if serr != nil {
return
}
// 文件重命名
//ddname := filename + "_backup_" + time.Now().Format("20060102150405")
ddname := filename + "_backup_" + time.Now().Format("20060102150405")
// 文件移动到备份目录下,并做压缩包
bkzip := filepath.Join(bkdir, ddname)
zfarr := []string{nfname}
util.ZipFiles(bkzip+".zip", zfarr, bkdir)
//渠道
// 加上路径
fnewname := filepath.Join(dirPath, ddname)
os.Rename(nfname, fnewname)
//fnewname := filepath.Join(bkdir, ddname)
//os.Rename(nfname, fnewname)
}
out, err := os.Create(nfname)

81
fsv2/util/nzip.go

@ -0,0 +1,81 @@
package util
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
"xtcfs/config"
)
/*
* add file to zip
*/
func ZipFiles(zipname string, files []string, zippath string) error {
fmt.Printf("zipname:%s\n", zipname)
// 创建zip文件
newZipFile, err := os.Create(zipname)
if err != nil {
return err
}
defer newZipFile.Close()
// zip写头
zipWriter := zip.NewWriter(newZipFile)
defer zipWriter.Close()
// 把files添加到zip中
for _, file := range files {
//
fmt.Printf("zipfiles in function :%s\n", file)
//
zipfile, err := os.Open(file)
if err != nil {
return err
}
defer zipfile.Close()
//
info, err := zipfile.Stat()
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), file)
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("header.name is %s\n", header.Name)
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
if _, err = io.Copy(writer, zipfile); err != nil {
return err
}
}
return nil
}
// 调用:
// ZipFiles(zipFileName, files, ".", ".")
Loading…
Cancel
Save