upload_file_local.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package utils
  2. import (
  3. "gin-vue-admin/global"
  4. "io"
  5. "mime/multipart"
  6. "os"
  7. "path"
  8. "strings"
  9. "time"
  10. )
  11. func UploadFileLocal(file *multipart.FileHeader) (err error, localPath string, key string) {
  12. // 读取文件后缀
  13. ext := path.Ext(file.Filename)
  14. // 读取文件名并加密
  15. fileName := strings.TrimSuffix(file.Filename, ext)
  16. fileName = MD5V([]byte(fileName))
  17. // 拼接新文件名
  18. lastName := fileName + "_" + time.Now().Format("20060102150405") + ext
  19. // 读取全局变量的定义路径
  20. savePath := global.GVA_CONFIG.LocalUpload.FilePath
  21. // 尝试创建此路径
  22. err = os.MkdirAll(savePath, os.ModePerm)
  23. if err != nil{
  24. global.GVA_LOG.Error("upload local file fail:", err)
  25. return err, "", ""
  26. }
  27. // 拼接路径和文件名
  28. dst := savePath + "/" + lastName
  29. // 下面为上传逻辑
  30. // 打开文件 defer 关闭
  31. src, err := file.Open()
  32. if err != nil {
  33. global.GVA_LOG.Error("upload local file fail:", err)
  34. return err, "", ""
  35. }
  36. defer src.Close()
  37. // 创建文件 defer 关闭
  38. out, err := os.Create(dst)
  39. if err != nil {
  40. global.GVA_LOG.Error("upload local file fail:", err)
  41. return err, "", ""
  42. }
  43. defer out.Close()
  44. // 传输(拷贝)文件
  45. _, err = io.Copy(out, src)
  46. if err != nil {
  47. global.GVA_LOG.Error("upload local file fail:", err)
  48. return err, "", ""
  49. }
  50. return nil, dst, lastName
  51. }