package upload import ( "errors" "io" "mime/multipart" "os" "path" "strings" "time" "wms/conf" "wms/pkg/logx" "wms/utils" ) type Local struct{} func (*Local) UploadFile(file *multipart.FileHeader) (string, string, error) { // 读取文件后缀 ext := path.Ext(file.Filename) // 读取文件名并加密 name := strings.TrimSuffix(file.Filename, ext) name = utils.MD5V([]byte(name)) // 拼接新文件名 filename := name + "_" + time.Now().Format("20060102150405") + ext // 尝试创建此路径 mkdirErr := os.MkdirAll(conf.LocalConf.StorePath, os.ModePerm) if mkdirErr != nil { logx.Errorf("function os.MkdirAll() err:%v", mkdirErr) return "", "", errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error()) } // 拼接路径和文件名 p := conf.LocalConf.StorePath + "/" + filename filepath := conf.LocalConf.StorePath + "/" + filename f, openError := file.Open() // 读取文件 if openError != nil { logx.Errorf("function file.Open() err:%v", openError) return "", "", errors.New("function file.Open() Filed, err:" + openError.Error()) } defer f.Close() // 创建文件 defer 关闭 out, createErr := os.Create(p) if createErr != nil { logx.Errorf("function os.Create() err:%v", createErr) return "", "", errors.New("function os.Create() Filed, err:" + createErr.Error()) } defer out.Close() // 创建文件 defer 关闭 _, copyErr := io.Copy(out, f) // 传输(拷贝)文件 if copyErr != nil { logx.Errorf("function io.Copy() err:%v", copyErr) return "", "", errors.New("function io.Copy() Filed, err:" + copyErr.Error()) } return filepath, filename, nil } func (*Local) DeleteFile(key string) error { p := conf.LocalConf.StorePath + "/" + key if strings.Contains(p, conf.LocalConf.StorePath) { if err := os.Remove(p); err != nil { return errors.New("本地文件删除失败, err:" + err.Error()) } } return nil }