上传文件到服务器临时文件夹,每次上传后进行检测,在超过100个文件以后,删除一半文件
以下是代码实例
func (c *Controller) UploadFile(ctx context.Context, req *v1.UploadFileReq) (res v1.UploadFileRes, err error) {
file := req.File
if file.Size > 1024*1024*50 {
g.RequestFromCtx(ctx).Response.Writeln(g.Map{"err": "上传的文件超过50mb", "size": file.Size})
return
}
path := "runtime/uploadTemp" //目录路径
files, err := req.File.Save(path, true)
res.File = filepath.Join(path, files)
res.Path = path
res.FileName = files
//文件超过100个以后,每次删除一个老文件
maxFiles := 100 // 最大文件数
delFiles := maxFiles / 2 //每次删除一半
dir, err := os.ReadDir(path)
if len(dir) > maxFiles {
// 按修改时间排序文件列表(最旧的文件在前)
sort.SliceStable(dir, func(i, j int) bool {
fi1, _ := dir[i].Info()
fi2, _ := dir[j].Info()
return fi1.ModTime().Before(fi2.ModTime())
})
for i := 0; i < len(dir)-maxFiles+delFiles; i++ {
filePath := path + "/" + dir[i].Name()
err2 := os.Remove(filePath)
if err2 != nil {
g.Log("文件删除失败" + filePath)
} else {
g.Log("成功删除文件" + filePath)
}
}
}
return
}
