@author: [piexlmax](https://github.com/piexlmax) @author: [ccfish86](https://github.com/ccfish86) @author: [SliverHorn](https://github.com/SliverHorn) @object: *Local @function: UploadFile @description: 上传文件 @param: file *multipart.FileHeader @return: string, string, error
(file *multipart.FileHeader)
| 29 | //@return: string, string, error |
| 30 | |
| 31 | func (*Local) UploadFile(file *multipart.FileHeader) (string, string, error) { |
| 32 | // 读取文件后缀 |
| 33 | ext := filepath.Ext(file.Filename) |
| 34 | // 读取文件名并加密 |
| 35 | name := strings.TrimSuffix(file.Filename, ext) |
| 36 | name = utils.MD5V([]byte(name)) |
| 37 | // 拼接新文件名 |
| 38 | filename := name + "_" + time.Now().Format("20060102150405") + ext |
| 39 | // 尝试创建此路径 |
| 40 | mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.StorePath, os.ModePerm) |
| 41 | if mkdirErr != nil { |
| 42 | global.GVA_LOG.Error("function os.MkdirAll() failed", zap.Any("err", mkdirErr.Error())) |
| 43 | return "", "", errors.New("function os.MkdirAll() failed, err:" + mkdirErr.Error()) |
| 44 | } |
| 45 | // 拼接路径和文件名 |
| 46 | p := global.GVA_CONFIG.Local.StorePath + "/" + filename |
| 47 | filepath := global.GVA_CONFIG.Local.Path + "/" + filename |
| 48 | |
| 49 | f, openError := file.Open() // 读取文件 |
| 50 | if openError != nil { |
| 51 | global.GVA_LOG.Error("function file.Open() failed", zap.Any("err", openError.Error())) |
| 52 | return "", "", errors.New("function file.Open() failed, err:" + openError.Error()) |
| 53 | } |
| 54 | defer f.Close() // 创建文件 defer 关闭 |
| 55 | |
| 56 | out, createErr := os.Create(p) |
| 57 | if createErr != nil { |
| 58 | global.GVA_LOG.Error("function os.Create() failed", zap.Any("err", createErr.Error())) |
| 59 | |
| 60 | return "", "", errors.New("function os.Create() failed, err:" + createErr.Error()) |
| 61 | } |
| 62 | defer out.Close() // 创建文件 defer 关闭 |
| 63 | |
| 64 | _, copyErr := io.Copy(out, f) // 传输(拷贝)文件 |
| 65 | if copyErr != nil { |
| 66 | global.GVA_LOG.Error("function io.Copy() failed", zap.Any("err", copyErr.Error())) |
| 67 | return "", "", errors.New("function io.Copy() failed, err:" + copyErr.Error()) |
| 68 | } |
| 69 | return filepath, filename, nil |
| 70 | } |
| 71 | |
| 72 | //@author: [piexlmax](https://github.com/piexlmax) |
| 73 | //@author: [ccfish86](https://github.com/ccfish86) |