local.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package upload
  2. import (
  3. "errors"
  4. "io"
  5. "mime/multipart"
  6. "os"
  7. "path"
  8. "speechAnalysis/conf"
  9. "speechAnalysis/pkg/logx"
  10. "strings"
  11. )
  12. type Local struct{}
  13. func (*Local) UploadFile(file *multipart.FileHeader) (string, string, error) {
  14. filename := path.Base(file.Filename)
  15. // 尝试创建此路径
  16. mkdirErr := os.MkdirAll(conf.LocalConf.StorePath, os.ModePerm)
  17. if mkdirErr != nil {
  18. logx.Errorf("function os.MkdirAll() err:%v", mkdirErr)
  19. return "", "", errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error())
  20. }
  21. // 拼接路径和文件名
  22. p := conf.LocalConf.StorePath + "/" + filename
  23. filepath := conf.LocalConf.StorePath + "/" + filename
  24. f, openError := file.Open() // 读取文件
  25. if openError != nil {
  26. logx.Errorf("function file.Open() err:%v", openError)
  27. return "", "", errors.New("function file.Open() Filed, err:" + openError.Error())
  28. }
  29. defer f.Close() // 创建文件 defer 关闭
  30. out, createErr := os.Create(p)
  31. if createErr != nil {
  32. logx.Errorf("function os.Create() err:%v", createErr)
  33. return "", "", errors.New("function os.Create() Filed, err:" + createErr.Error())
  34. }
  35. defer out.Close() // 创建文件 defer 关闭
  36. _, copyErr := io.Copy(out, f) // 传输(拷贝)文件
  37. if copyErr != nil {
  38. logx.Errorf("function io.Copy() err:%v", copyErr)
  39. return "", "", errors.New("function io.Copy() Filed, err:" + copyErr.Error())
  40. }
  41. return filepath, filename, nil
  42. }
  43. func (*Local) DeleteFile(key string) error {
  44. p := conf.LocalConf.StorePath + "/" + key
  45. if strings.Contains(p, conf.LocalConf.StorePath) {
  46. if err := os.Remove(p); err != nil {
  47. return errors.New("本地文件删除失败, err:" + err.Error())
  48. }
  49. }
  50. return nil
  51. }