yinbangzhong
2024-06-12 eb1d2e16e0ec4721ba48d101ced1e4b994b463fd
controllers/audio.go
@@ -6,6 +6,7 @@
   "github.com/gin-gonic/gin"
   "gorm.io/gorm"
   "io"
   "mime/multipart"
   "os"
   "path"
   "speechAnalysis/constvar"
@@ -27,36 +28,34 @@
// @Tags      音频
// @Summary   上传音频
// @Produce   application/json
// @Param file formData file true "音频文件"
// @Param file formData file false "音频文件"
// @Param files formData []file false "多个音频文件"
// @Success   200 {object} util.Response "成功"
// @Router    /api-sa/v1/audio/upload [post]
func (slf AudioCtl) Upload(c *gin.Context) {
   _, header, err := c.Request.FormFile("file")
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   f := func(header *multipart.FileHeader) error {
      logFormat := "%s,%s   "
   filename := path.Base(header.Filename)
   arr := strings.Split(filename, "_")
   if len(arr) != 6 {
      util.ResponseFormat(c, code.RequestParamError, "文件名称错误")
      return
         //util.ResponseFormat(c, code.RequestParamError, "文件名称错误")
         return errors.New(fmt.Sprintf(logFormat, filename, "文件名称错误"))
   }
   _, err = models.NewAudioSearch().SetName(filename).First()
      _, err := models.NewAudioSearch().SetName(filename).First()
   if err != gorm.ErrRecordNotFound {
      util.ResponseFormat(c, code.RequestParamError, "重复上传")
      return
         //util.ResponseFormat(c, code.RequestParamError, "重复上传")
         return errors.New(fmt.Sprintf(logFormat, filename, "重复上传"))
   }
   oss := upload.NewOss()
   filePath, filename, uploadErr := oss.UploadFile(header)
   if uploadErr != nil {
      logx.Errorf("upload audio err: %v", err)
      util.ResponseFormat(c, code.RequestParamError, "上传失败")
      return
         //util.ResponseFormat(c, code.RequestParamError, "上传失败")
         return errors.New(fmt.Sprintf(logFormat, filename, "上传失败"))
   }
   timeStr := arr[4] + strings.Split(arr[5], ".")[0]
@@ -64,8 +63,8 @@
   t, err := time.ParseInLocation("20060102150405", timeStr, time.Local)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "时间格式不对")
      return
         //util.ResponseFormat(c, code.RequestParamError, "时间格式不对")
         return errors.New(fmt.Sprintf(logFormat, filename, "上传失败"))
   }
   audio := &models.Audio{
@@ -82,8 +81,8 @@
   }
   if err = models.NewAudioSearch().Create(audio); err != nil {
      util.ResponseFormat(c, code.SaveFail, "上传失败")
      return
         //util.ResponseFormat(c, code.SaveFail, "上传失败")
         return errors.New(fmt.Sprintf(logFormat, filename, "上传失败"))
   }
   go func() {
@@ -110,8 +109,33 @@
      }
   }()
      return nil
   }
   var headers []*multipart.FileHeader
   _, header, _ := c.Request.FormFile("file")
   if header != nil {
      headers = append(headers, header)
   }
   if len(c.Request.MultipartForm.File["files"]) > 0 {
      headers = c.Request.MultipartForm.File["files"]
   }
   var errs []error
   for _, h := range headers {
      if e := f(h); e != nil {
         errs = append(errs, e)
      }
   }
   if len(errs) > 0 {
      var r strings.Builder
      for _, e := range errs {
         r.WriteString(e.Error())
      }
      util.ResponseFormat(c, code.RequestParamError, r.String())
      return
   } else {
   util.ResponseFormat(c, code.Success, "添加成功")
      return
   }
}
func (slf AudioCtl) ParamsCheck(filename string) (err error) {