1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| const ( maxFileSize = 1024 * 1024 * 50 uploadPath = "./upload" )
func (l *AudioUploadLogic) AudioUpload(req *types.AudioUploadReq, r *http.Request) (resp *types.AudioUploadResp, err error) { _ = r.ParseMultipartForm(maxFileSize) resp = new(types.AudioUploadResp) sUserId := l.ctx.Value("userid").(string) iUserId, _ := strconv.Atoi(sUserId) file, fileHeader, err := r.FormFile("file") if err != nil { return nil, errors.New("请选择要上传的文件!") } defer file.Close() if fileHeader.Size > maxFileSize { return nil, errors.New("文件已超过50M!") } buf := make([]byte, 261) n, _ := io.ReadFull(file, buf) buf = buf[:n] if !filetype.IsMIME(buf, "audio/mpeg") { return nil, errors.New("文件格式不正确!") }
path := uploadPath + "/" + time.Now().Format(time.DateOnly) _, err = os.ReadDir(path) if err != nil { _ = os.MkdirAll(path, fs.ModePerm) }
randomFileName := fmt.Sprintf("%s%s", uuid.New().String(), filepath.Ext(fileHeader.Filename)) localFileName := fmt.Sprintf("%s/%s", path, randomFileName)
logx.Infof("randomFileName: %s", randomFileName) logx.Infof("localFileName: %s", localFileName)
f, err := os.OpenFile(localFileName, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { return nil, errors.New("上传失败、请重新上传!") } defer f.Close()
_, err = io.Copy(f, file) if err != nil { return nil, errors.New("上传失败、请重新上传!") } uploadFileName := "manage/audio/" + randomFileName uploadURL, err := pkg.UploadFileToOSS(l.svcCtx.Config, fileHeader, localFileName, uploadFileName) if err != nil { return nil, errors.New("上传失败、请重新上传!") } logx.Infof("url: %s", uploadURL)
db := l.svcCtx.DB ret := db.Model(&model.AudioOrderInfo{}).Where("id = ?", req.ID).Updates(map[string]interface{}{ "user_id": iUserId, "audio_url": uploadURL, "updated_at": time.Now(), }) if ret.Error != nil || ret.RowsAffected == 0 { return nil, errors.New("上传失败、请重新上传!") } resp.FileUrl = uploadURL return resp, nil }
|