1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package upload
- import (
- "errors"
- "io"
- "mime/multipart"
- "os"
- "path/filepath"
- "strings"
- "time"
- "go.uber.org/zap"
- "server/global"
- "server/utils"
- )
- type Local struct{}
- //@author: [piexlmax](https://github.com/piexlmax)
- //@author: [ccfish86](https://github.com/ccfish86)
- //@author: [SliverHorn](https://github.com/SliverHorn)
- //@object: *Local
- //@function: UploadFile
- //@description: 上传文件
- //@param: dept *multipart.FileHeader
- //@return: string, string, error
- func (*Local) UploadFile(dept *multipart.FileHeader) (string, string, error) {
- // 读取文件后缀
- ext := filepath.Ext(dept.Filename)
- // 读取文件名并加密
- name := strings.TrimSuffix(dept.Filename, ext)
- name = utils.MD5V([]byte(name))
- // 拼接新文件名
- deptname := name + "_" + time.Now().Format("20060102150405") + ext
- // 尝试创建此路径
- mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.StorePath, os.ModePerm)
- if mkdirErr != nil {
- global.GVA_LOG.Error("function os.MkdirAll() failed", zap.Any("err", mkdirErr.Error()))
- return "", "", errors.New("function os.MkdirAll() failed, err:" + mkdirErr.Error())
- }
- // 拼接路径和文件名
- p := global.GVA_CONFIG.Local.StorePath + "/" + deptname
- filepath := global.GVA_CONFIG.Local.Path + "/" + deptname
- f, openError := dept.Open() // 读取文件
- if openError != nil {
- global.GVA_LOG.Error("function dept.Open() failed", zap.Any("err", openError.Error()))
- return "", "", errors.New("function dept.Open() failed, err:" + openError.Error())
- }
- defer f.Close() // 创建文件 defer 关闭
- out, createErr := os.Create(p)
- if createErr != nil {
- global.GVA_LOG.Error("function os.Create() failed", zap.Any("err", createErr.Error()))
- return "", "", errors.New("function os.Create() failed, err:" + createErr.Error())
- }
- defer out.Close() // 创建文件 defer 关闭
- _, copyErr := io.Copy(out, f) // 传输(拷贝)文件
- if copyErr != nil {
- global.GVA_LOG.Error("function io.Copy() failed", zap.Any("err", copyErr.Error()))
- return "", "", errors.New("function io.Copy() failed, err:" + copyErr.Error())
- }
- return filepath, deptname, nil
- }
- //@author: [piexlmax](https://github.com/piexlmax)
- //@author: [ccfish86](https://github.com/ccfish86)
- //@author: [SliverHorn](https://github.com/SliverHorn)
- //@object: *Local
- //@function: DeleteFile
- //@description: 删除文件
- //@param: key string
- //@return: error
- func (*Local) DeleteFile(key string) error {
- p := global.GVA_CONFIG.Local.StorePath + "/" + key
- if strings.Contains(p, global.GVA_CONFIG.Local.StorePath) {
- if err := os.Remove(p); err != nil {
- return errors.New("本地文件删除失败, err:" + err.Error())
- }
- }
- return nil
- }
|