上传文件到服务器临时文件夹,每次上传后进行检测,在超过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 }